Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cgmes import update. Import EQ and SSH separately. TieLines #3327

Draft
wants to merge 101 commits into
base: main
Choose a base branch
from
Draft
Changes from 1 commit
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
dcce636
update loads.
marqueslanauja Oct 16, 2024
6bc53a8
Update loads
marqueslanauja Oct 16, 2024
0241870
Adjust validationUtil
marqueslanauja Oct 16, 2024
e1e04b2
Adjust FunctionalLogsTests
marqueslanauja Oct 16, 2024
3eafccf
Fix all the tests
marqueslanauja Oct 16, 2024
3884a51
Fix issues
marqueslanauja Oct 16, 2024
71bb0f0
Pretty code
marqueslanauja Oct 16, 2024
fafaf11
Pretty code
marqueslanauja Oct 16, 2024
004b824
Pretty code
marqueslanauja Oct 18, 2024
8dc44cf
update
marqueslanauja Nov 6, 2024
81954c6
Typo
marqueslanauja Nov 6, 2024
2e6657b
Typo
marqueslanauja Nov 6, 2024
cbb0f54
Updating report
marqueslanauja Nov 6, 2024
2812eec
Merge branch 'main' into cgmes_import_update_network_loads
marqueslanauja Nov 6, 2024
32559be
Merge branch 'main' into cgmes_import_update_network_transformers
marqueslanauja Nov 6, 2024
b3d0945
update voltage and angles after the update
marqueslanauja Nov 6, 2024
7e3766a
Fix code smells
marqueslanauja Nov 7, 2024
df10d15
Minor changes
marqueslanauja Nov 7, 2024
5114bde
Pretty code
marqueslanauja Nov 7, 2024
69ade84
Reduce complexity
marqueslanauja Nov 7, 2024
e4b95b3
Reduce complexity
marqueslanauja Nov 7, 2024
81376bd
Undo mistake made before
marqueslanauja Nov 7, 2024
e7da075
pretty code
marqueslanauja Nov 7, 2024
4884abb
Some improvements
marqueslanauja Nov 13, 2024
779d778
Some improvements
marqueslanauja Nov 13, 2024
cdc18f7
More improvements
marqueslanauja Nov 13, 2024
5b2796c
update by using static classes
marqueslanauja Nov 14, 2024
324c805
Remove unused methods
marqueslanauja Nov 14, 2024
160edf1
update by using static classes
marqueslanauja Nov 14, 2024
c9075ca
Update comment
marqueslanauja Nov 14, 2024
79e54ae
Fix operational limits and pretty code
marqueslanauja Nov 14, 2024
42e4a14
pretty code
marqueslanauja Nov 14, 2024
3037fc2
Merge branch 'main' into cgmes_import_update_network_loads
marqueslanauja Dec 11, 2024
90c1caa
Merge branch 'main' into cgmes_import_update_network_transformers
marqueslanauja Dec 11, 2024
cfbcdde
unitary tests
marqueslanauja Dec 11, 2024
5be3060
Merge branch 'main' into cgmes_import_update_network_loads
zamarrenolm Dec 11, 2024
a23bad2
use proposed API for network updates
zamarrenolm Dec 11, 2024
52a6c8f
Add unitary tests
marqueslanauja Dec 12, 2024
eee776c
Pretty code
marqueslanauja Dec 12, 2024
a0b8bfd
Merge branch 'main' into cgmes_import_update_network_transformers
marqueslanauja Dec 12, 2024
5968a0b
Merge branch 'cgmes_import_update_network_loads' into cgmes_import_up…
marqueslanauja Dec 12, 2024
3a5a3ae
Minor changes.
marqueslanauja Dec 12, 2024
4485ba1
Fix code smell
marqueslanauja Dec 12, 2024
b63bbcd
Clean load queries
marqueslanauja Dec 12, 2024
c3a3893
Clean transformer queries
marqueslanauja Dec 12, 2024
9409954
Improve the management of properties associated with operational limi…
marqueslanauja Dec 12, 2024
fadfa86
Merge branch 'main' into cgmes_import_update_network_transformers
marqueslanauja Jan 2, 2025
7d6b4be
remove unused update queries
marqueslanauja Jan 2, 2025
35e8d42
Merge branch 'main' into cgmes_import_update_network_transformers
marqueslanauja Jan 7, 2025
84655eb
Update generators
marqueslanauja Jan 9, 2025
0e0ee51
Merge branch 'main' into cgmes_import_update_network_generators
marqueslanauja Jan 9, 2025
67af19c
targetV adjustment
marqueslanauja Jan 10, 2025
876d15b
Clean query
marqueslanauja Jan 13, 2025
9c4add2
update staticVarCompensator
marqueslanauja Jan 13, 2025
4aa9045
pretty code
marqueslanauja Jan 13, 2025
6c41d49
Extend previous change to regulating controls
marqueslanauja Jan 14, 2025
3861d2a
Reduce complexity and additional minor changes
marqueslanauja Jan 14, 2025
a62ea64
Enhance the EQ files used in unit tests
marqueslanauja Jan 15, 2025
79204da
Improve files unit tests
marqueslanauja Jan 17, 2025
bac093a
Minor change
marqueslanauja Jan 17, 2025
ec9aac1
update shuntCompensator
marqueslanauja Jan 20, 2025
4aa84a9
Fix connect
marqueslanauja Jan 21, 2025
6ed7e1d
Improvements to previous PRs
marqueslanauja Jan 22, 2025
a496b9d
update hvdcLines
marqueslanauja Jan 22, 2025
194c661
Remove unused code
marqueslanauja Jan 22, 2025
106c0a1
Remove unused parameter
marqueslanauja Jan 22, 2025
d167cef
Improve the update of regulating control
marqueslanauja Jan 27, 2025
8a88d03
Merge branch 'main' into cgmes_import_update_network_hvdcLines
marqueslanauja Jan 27, 2025
16c2fc0
Review regulatingControls and defaultValues
marqueslanauja Jan 29, 2025
14aa5de
Merge branch 'main' into cgmes_import_update_network_hvdcLines
marqueslanauja Jan 30, 2025
3073794
Remove commented-out lines of code
marqueslanauja Jan 30, 2025
58ce4a1
Minor changes
marqueslanauja Jan 30, 2025
e8a78b2
Improve context
marqueslanauja Jan 30, 2025
9b90b21
Remove duplicated code
marqueslanauja Jan 30, 2025
1f7fa62
Clean regulating control
marqueslanauja Jan 30, 2025
8191bbe
update danglingLines
marqueslanauja Feb 6, 2025
99db5fd
Merge branch 'main' into cgmes_import_update_network_danglingLines
marqueslanauja Feb 6, 2025
e208f7e
Fix bug
marqueslanauja Feb 6, 2025
43a5563
update lines
marqueslanauja Feb 7, 2025
5d8b1f1
Fix issues
marqueslanauja Feb 7, 2025
7981f55
minor changes
marqueslanauja Feb 10, 2025
0249a1f
Minor changes
marqueslanauja Feb 10, 2025
6281fb2
Improve svVoltages
marqueslanauja Feb 10, 2025
be39fa4
Add operationalLimits tests in danglingLines and transformers
marqueslanauja Feb 10, 2025
50c889e
Fix issue
marqueslanauja Feb 10, 2025
1ec858d
Fix issues
marqueslanauja Feb 10, 2025
824dd0d
update switches
marqueslanauja Feb 13, 2025
e965cd4
Merge branch 'main' into cgmes_import_update_network_switches
marqueslanauja Feb 13, 2025
9c57fe3
Fix issue
marqueslanauja Feb 13, 2025
91ba341
Fix issue
marqueslanauja Feb 13, 2025
3a0b6ce
add SV unit tests
marqueslanauja Feb 17, 2025
aa0aae5
Merge branch 'main' into cgmes_import_update_network_switches
marqueslanauja Feb 17, 2025
30aac85
Minor changes
marqueslanauja Feb 17, 2025
8f21734
voltage and angle update
marqueslanauja Feb 18, 2025
a4308be
Merge branch 'main' into cgmes_import_update_network_switches
marqueslanauja Feb 18, 2025
f8fe98e
Minor change
marqueslanauja Feb 19, 2025
09fbc87
TieLine unit tests
marqueslanauja Feb 19, 2025
043f8fb
remove unused variable
marqueslanauja Feb 19, 2025
a21e830
improve switches created from disconnected terminals
marqueslanauja Feb 24, 2025
296ecdb
Merge branch 'main' into cgmes_import_update_network_tieLines
marqueslanauja Feb 26, 2025
37630f8
TieLines when there are more than two danglingLines at the boundary node
marqueslanauja Feb 27, 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
@@ -293,7 +293,7 @@ public Network convert(ReportNode reportNode) {
private void updateWithAllInputs(Network network, Context convertContext, ReportNode reportNode) {
// FIXME(Luma) Before switching to update we must invalidate all caches of the cgmes model
// and change the query catalog to "update" mode
if (!sshIncludedInCgmesModel(this.cgmes)) {
if (!sshOrSvIsIncludedInCgmesModel(this.cgmes)) {
return;
}
this.cgmes.invalidateCaches();
@@ -306,8 +306,11 @@ private void updateWithAllInputs(Network network, Context convertContext, Report
update(network, updateContext, reportNode);
}

private static boolean sshIncludedInCgmesModel(CgmesModel cgmes) {
return cgmes.version().contains("CIM14") || cgmes.fullModels().stream().anyMatch(fullModel -> fullModel.getId("profileList").contains("SteadyStateHypothesis"));
private static boolean sshOrSvIsIncludedInCgmesModel(CgmesModel cgmes) {
return cgmes.version().contains("CIM14")
|| cgmes.fullModels().stream()
.map(fullModel -> fullModel.getId("profileList"))
.anyMatch(profileList -> profileList.contains("SteadyStateHypothesis") || profileList.contains("StateVariables"));
}

public void update(Network network, ReportNode reportNode) {
Original file line number Diff line number Diff line change
@@ -171,7 +171,15 @@ private static void updateRegulatingControlVoltage(Generator generator, boolean
}

// Regulating control is enabled AND this equipment participates in regulating control
generator.setTargetV(targetV).setVoltageRegulatorOn(regulatingOn && controlEnabled && validTargetV);
setVoltageRegulation(generator, targetV, regulatingOn && controlEnabled && validTargetV);
}

private static void setVoltageRegulation(Generator generator, double targetV, boolean regulatingOn) {
if (regulatingOn) {
generator.setTargetV(targetV).setVoltageRegulatorOn(true);
} else {
generator.setVoltageRegulatorOn(false).setTargetV(targetV);
}
}

private static void updateRegulatingControlReactivePower(Generator generator, boolean controlEnabled, Context context) {
@@ -187,7 +195,15 @@ private static void updateRegulatingControlReactivePower(Generator generator, bo
double targetQ = cgmesRegulatingControl.map(propertyBag -> findTargetQ(propertyBag, terminalSign, defaultTargetQ, DefaultValueUse.NOT_DEFINED, context)).orElse(defaultValue(defaultTargetQ, context));
boolean regulatingOn = cgmesRegulatingControl.map(propertyBag -> findRegulatingOn(propertyBag, defaultRegulatingOn, DefaultValueUse.NOT_DEFINED, context)).orElse(defaultValue(defaultRegulatingOn, context));

remoteReactivePowerControl.setTargetQ(targetQ).setEnabled(regulatingOn && controlEnabled && isValidTargetQ(targetQ));
setReactivePowerRegulation(remoteReactivePowerControl, targetQ, regulatingOn && controlEnabled && isValidTargetQ(targetQ));
}

private static void setReactivePowerRegulation(RemoteReactivePowerControl remoteReactivePowerControl, double targetQ, boolean regulatingOn) {
if (regulatingOn) {
remoteReactivePowerControl.setTargetQ(targetQ).setEnabled(regulatingOn);
} else {
remoteReactivePowerControl.setEnabled(regulatingOn).setTargetQ(targetQ);
}
}

private static DefaultValueDouble getDefaultTargetV(Generator generator) {
Original file line number Diff line number Diff line change
@@ -175,8 +175,7 @@ private static void updateWhenIsConnectedAndBoundarySideIsOpen(DanglingLine dang

danglingLine.getGeneration().setTargetP(0.0);
danglingLine.getGeneration().setTargetQ(0.0);
danglingLine.getGeneration().setTargetV(targetV);
danglingLine.getGeneration().setVoltageRegulationOn(false);
setRegulation(danglingLine, targetV, false);
}
danglingLine.setP0(0.0);
danglingLine.setQ0(0.0);
@@ -196,14 +195,21 @@ private static void update(DanglingLine danglingLine, Context context) {
danglingLine.setQ0(0.0);
danglingLine.getGeneration().setTargetP(getTargetP(updatedPowerFlow, danglingLine.getGeneration(), context));
danglingLine.getGeneration().setTargetQ(getTargetQ(updatedPowerFlow, danglingLine.getGeneration(), context));
danglingLine.getGeneration().setTargetV(targetV);
danglingLine.getGeneration().setVoltageRegulationOn(regulatingOn && isValidTargetV(targetV));
setRegulation(danglingLine, targetV, regulatingOn && isValidTargetV(targetV));
} else {
danglingLine.setP0(getTargetP(updatedPowerFlow, danglingLine, context));
danglingLine.setQ0(getTargetQ(updatedPowerFlow, danglingLine, context));
}
}

private static void setRegulation(DanglingLine danglingLine, double targetV, boolean regulatingOn) {
if (regulatingOn) {
danglingLine.getGeneration().setTargetV(targetV).setVoltageRegulationOn(true);
} else {
danglingLine.getGeneration().setVoltageRegulationOn(false).setTargetV(targetV);
}
}

private static Optional<PropertyBag> getCgmesEquivalentInjection(DanglingLine danglingLine, Context context) {
String equivalentInjectionId = danglingLine.getProperty(Conversion.CGMES_PREFIX_ALIAS_PROPERTIES + CgmesNames.EQUIVALENT_INJECTION);
return equivalentInjectionId != null ? Optional.ofNullable(context.equivalentInjection(equivalentInjectionId)) : Optional.empty();
Original file line number Diff line number Diff line change
@@ -113,9 +113,15 @@ private static void updateRegulatingControl(ShuntCompensator shuntCompensator, b
double targetDeadband = cgmesRegulatingControl.map(propertyBag -> findTargetDeadband(propertyBag, defaultTargetDeadband, DefaultValueUse.NOT_DEFINED, context)).orElse(defaultValue(defaultTargetDeadband, context));
boolean enabled = cgmesRegulatingControl.map(propertyBag -> findRegulatingOn(propertyBag, defaultRegulatingOn, DefaultValueUse.NOT_DEFINED, context)).orElse(defaultValue(defaultRegulatingOn, context));

shuntCompensator.setTargetV(targetV)
.setTargetDeadband(targetDeadband)
.setVoltageRegulatorOn(controlEnabled && enabled && isValidTargetV(targetV) && isValidTargetDeadband(targetDeadband));
setRegulation(shuntCompensator, targetV, targetDeadband, controlEnabled && enabled && isValidTargetV(targetV) && isValidTargetDeadband(targetDeadband));
}

private static void setRegulation(ShuntCompensator shuntCompensator, double targetV, double targetDeadband, boolean regulatingOn) {
if (regulatingOn) {
shuntCompensator.setTargetV(targetV).setTargetDeadband(targetDeadband).setVoltageRegulatorOn(true);
} else {
shuntCompensator.setVoltageRegulatorOn(false).setTargetV(targetV).setTargetDeadband(targetDeadband);
}
}

private static DefaultValueDouble getDefaultTargetV(ShuntCompensator shuntCompensator) {
Original file line number Diff line number Diff line change
@@ -101,18 +101,26 @@ private static void updateRegulatingControl(StaticVarCompensator staticVarCompen
double targetV = cgmesRegulatingControl.map(propertyBag -> findTargetV(propertyBag, defaultTargetV, DefaultValueUse.NOT_DEFINED, context)).orElse(defaultValue(defaultTargetV, context));
StaticVarCompensator.RegulationMode regulationMode = controlEnabled && regulatingOn && isValidTargetV(targetV) ? StaticVarCompensator.RegulationMode.VOLTAGE : StaticVarCompensator.RegulationMode.OFF;

staticVarCompensator.setVoltageSetpoint(targetV).setRegulationMode(regulationMode);
setRegulation(staticVarCompensator, staticVarCompensator.getReactivePowerSetpoint(), targetV, regulationMode);
} else if (selectedMode != null && isControlModeReactivePower(selectedMode.toLowerCase())) {
DefaultValueDouble defaultTargetQ = getDefaultTargetQ(staticVarCompensator, defaultQ);
double targetQ = cgmesRegulatingControl.map(propertyBag -> findTargetQ(propertyBag, 1, defaultTargetQ, DefaultValueUse.NOT_DEFINED, context)).orElse(defaultValue(defaultTargetQ, context));
StaticVarCompensator.RegulationMode regulationMode = controlEnabled && regulatingOn && isValidTargetQ(targetQ) ? StaticVarCompensator.RegulationMode.REACTIVE_POWER : StaticVarCompensator.RegulationMode.OFF;

staticVarCompensator.setReactivePowerSetpoint(targetQ).setRegulationMode(regulationMode);
setRegulation(staticVarCompensator, targetQ, staticVarCompensator.getVoltageSetpoint(), regulationMode);
} else {
context.ignored(mode, "Unsupported regulation mode for staticVarCompensator " + staticVarCompensator.getId());
}
}

private static void setRegulation(StaticVarCompensator staticVarCompensator, double targetQ, double targetV, StaticVarCompensator.RegulationMode regulationMode) {
switch (regulationMode) {
case OFF -> staticVarCompensator.setRegulationMode(regulationMode).setVoltageSetpoint(targetV).setReactivePowerSetpoint(targetQ);
case VOLTAGE -> staticVarCompensator.setVoltageSetpoint(targetV).setRegulationMode(regulationMode).setReactivePowerSetpoint(targetQ);
case REACTIVE_POWER -> staticVarCompensator.setReactivePowerSetpoint(targetQ).setRegulationMode(regulationMode).setVoltageSetpoint(targetV);
}
}

private static boolean isDefaultVoltageControl(boolean cgmesRegulatingControlIsNotDefined, boolean controlEnabled, String defaultRegulationMode, double defaultTargetV) {
return cgmesRegulatingControlIsNotDefined
&& controlEnabled
Original file line number Diff line number Diff line change
@@ -222,9 +222,15 @@ private static <C extends Connectable<C>> void updateRatioTapChanger(Connectable
targetDeadband = Double.NaN; // To avoid an exception from checkTargetDeadband
}

rtc.setRegulating(regulatingOn && isRegulatingAllowed && validTargetV && validTargetDeadband)
.setTargetV(targetV)
.setTargetDeadband(targetDeadband);
setRegulation(rtc, targetV, targetDeadband, regulatingOn && isRegulatingAllowed && validTargetV && validTargetDeadband);
}
}

private static void setRegulation(RatioTapChanger rtc, double targetV, double targetDeadband, boolean regulatingOn) {
if (regulatingOn) {
rtc.setTargetV(targetV).setTargetDeadband(targetDeadband).setRegulating(true);
} else {
rtc.setRegulating(false).setTargetV(targetV).setTargetDeadband(targetDeadband);
}
}

@@ -268,9 +274,15 @@ private static <C extends Connectable<C>> void updatePhaseTapChanger(Connectable
targetDeadband = Double.NaN; // To avoid an exception from checkTargetDeadband
}

ptc.setRegulating(fixedRegulating && isRegulatingAllowed && isValidTargetValue(targetValue) && validTargetDeadband)
.setRegulationValue(targetValue)
.setTargetDeadband(targetDeadband);
setRegulation(ptc, targetValue, targetDeadband, fixedRegulating && isRegulatingAllowed && isValidTargetValue(targetValue) && validTargetDeadband);
}
}

private static void setRegulation(PhaseTapChanger ptc, double targetValue, double targetDeadband, boolean regulatingOn) {
if (regulatingOn) {
ptc.setRegulationValue(targetValue).setTargetDeadband(targetDeadband).setRegulating(true);
} else {
ptc.setRegulating(false).setRegulationValue(targetValue).setTargetDeadband(targetDeadband);
}
}

Original file line number Diff line number Diff line change
@@ -85,6 +85,68 @@ void importEqAndTwoSshsTest() {
assertTrue(checkSsh1(acLineSegment, equivalentBranch, powerTransformer, breaker));
}

@Test
void importSvTogetherTest() {
Network network = readCgmesResources(DIR, "danglingLine_EQ.xml", "danglingLine_EQ_BD.xml", "danglingLine_SSH.xml", "danglingLine_TP.xml", "danglingLine_SV.xml");

assertEquals(4, network.getDanglingLineCount());

double tol = 0.0000001;
DanglingLine acLineSegment = network.getDanglingLine("ACLineSegment");
assertEquals(285.2495134203, acLineSegment.getTerminal().getP(), tol);
assertEquals(-68.1683990331, acLineSegment.getTerminal().getQ(), tol);

DanglingLine equivalentBranch = network.getDanglingLine("EquivalentBranch");
assertEquals(275.1, equivalentBranch.getTerminal().getP(), tol);
assertEquals(50.5, equivalentBranch.getTerminal().getQ(), tol);

DanglingLine powerTransformer = network.getDanglingLine("PowerTransformer");
assertTrue(Double.isNaN(powerTransformer.getTerminal().getP()));
assertTrue(Double.isNaN(powerTransformer.getTerminal().getQ()));

DanglingLine breaker = network.getDanglingLine("Breaker");
assertEquals(10.0, breaker.getTerminal().getP(), tol);
assertEquals(5.0, breaker.getTerminal().getQ(), tol);
}

@Test
void importSvSeparatelyTest() {
Network network = readCgmesResources(DIR, "danglingLine_EQ.xml", "danglingLine_EQ_BD.xml", "danglingLine_SSH.xml");

assertEquals(4, network.getDanglingLineCount());

double tol = 0.0000001;
DanglingLine acLineSegment = network.getDanglingLine("ACLineSegment");
assertTrue(Double.isNaN(acLineSegment.getTerminal().getP()));
assertTrue(Double.isNaN(acLineSegment.getTerminal().getQ()));

DanglingLine equivalentBranch = network.getDanglingLine("EquivalentBranch");
assertTrue(Double.isNaN(equivalentBranch.getTerminal().getP()));
assertTrue(Double.isNaN(equivalentBranch.getTerminal().getQ()));

DanglingLine powerTransformer = network.getDanglingLine("PowerTransformer");
assertTrue(Double.isNaN(powerTransformer.getTerminal().getP()));
assertTrue(Double.isNaN(powerTransformer.getTerminal().getQ()));

DanglingLine breaker = network.getDanglingLine("Breaker");
assertEquals(10.0, breaker.getTerminal().getP(), tol);
assertEquals(5.0, breaker.getTerminal().getQ(), tol);

readCgmesResources(network, DIR, "danglingLine_TP.xml", "danglingLine_SV.xml");

assertEquals(0.0503090159, acLineSegment.getTerminal().getP(), tol);
assertEquals(-145.5845194744, acLineSegment.getTerminal().getQ(), tol);

assertEquals(275.1, equivalentBranch.getTerminal().getP(), tol);
assertEquals(50.5, equivalentBranch.getTerminal().getQ(), tol);

assertTrue(Double.isNaN(powerTransformer.getTerminal().getP()));
assertTrue(Double.isNaN(powerTransformer.getTerminal().getQ()));

assertEquals(10.0, breaker.getTerminal().getP(), tol);
assertEquals(5.0, breaker.getTerminal().getQ(), tol);
}

private static boolean checkEq(DanglingLine acLineSegment, DanglingLine equivalentBranch, DanglingLine powerTransformer, DanglingLine breaker) {
assertTrue(checkEq(acLineSegment));
assertTrue(checkNotDefinedLimits(acLineSegment));
Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@
import com.powsybl.cgmes.model.CgmesNames;
import com.powsybl.iidm.network.Generator;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.Terminal;
import com.powsybl.iidm.network.extensions.ActivePowerControl;
import com.powsybl.iidm.network.extensions.ReferencePriority;
import org.junit.jupiter.api.Test;
@@ -57,7 +58,7 @@ void importEqAndSshTogetherTest() {
}

@Test
void importEqAndTwoSshsTest() {
void importEqTwoSshsAndSvTest() {
Network network = readCgmesResources(DIR, "generator_EQ.xml");
assertEquals(3, network.getGeneratorCount());

@@ -79,6 +80,11 @@ void importEqAndTwoSshsTest() {
assertTrue(checkSsh(synchronousMachine, 165.0, -5.0, 410.0, true, 0.9, 1));
assertTrue(checkSsh(externalNetworkInjection, -10.0, -5.0, Double.NaN, false, 0.0, 0));
assertTrue(checkSsh(equivalentInjection, -174.0, -5.0, Double.NaN, false, 0.0, 0));

readCgmesResources(network, DIR, "generator_SV.xml");
assertTrue(checkFlows(synchronousMachine.getTerminal(), 100.0, -50.0));
assertTrue(checkFlows(externalNetworkInjection.getTerminal(), 250.0, -30.0));
assertTrue(checkFlows(equivalentInjection.getTerminal(), 150.0, 50.0));
}

private static boolean checkEq(Generator generator) {
@@ -111,4 +117,11 @@ private static boolean checkSsh(Generator generator, double targetP, double targ
assertEquals(referencePriority, ReferencePriority.get(generator));
return true;
}

private static boolean checkFlows(Terminal terminal, double p, double q) {
double tol = 0.0000001;
assertEquals(p, terminal.getP(), tol);
assertEquals(q, terminal.getQ(), tol);
return true;
}
}
Original file line number Diff line number Diff line change
@@ -53,7 +53,7 @@ void importEqAndSshTogetherTest() {
}

@Test
void importEqAndTwoSshsTest() {
void importEqTwoSshsAndSvTest() {
Network network = readCgmesResources(DIR, "hvdc_EQ.xml");
assertEquals(2, network.getHvdcLineCount());

@@ -78,6 +78,10 @@ void importEqAndTwoSshsTest() {
assertTrue(checkSshVsc(vscHvdcLine, 596.4, SIDE_1_RECTIFIER_SIDE_2_INVERTER,
0.0, 396.54, 0.0, true,
0.0, 0.0, 30.0, false));

readCgmesResources(network, DIR, "hvdc_SV.xml");
assertTrue(checkFlows(lccHvdcLine.getConverterStation1().getTerminal(), 200.0, 50.0, lccHvdcLine.getConverterStation2().getTerminal(), -200.1, -50.1));
assertTrue(checkFlows(vscHvdcLine.getConverterStation1().getTerminal(), 100.0, 25.0, vscHvdcLine.getConverterStation2().getTerminal(), -100.1, -25.1));
}

private static boolean checkEqLcc(HvdcLine hvdcLine) {
@@ -159,4 +163,13 @@ private static boolean checkSshVscConverter(VscConverterStation vscConverterStat
assertEquals(voltageRegulatorOn, vscConverterStation.isVoltageRegulatorOn());
return true;
}

private static boolean checkFlows(Terminal terminal1, double p1, double q1, Terminal terminal2, double p2, double q2) {
double tol = 0.0000001;
assertEquals(p1, terminal1.getP(), tol);
assertEquals(q1, terminal1.getQ(), tol);
assertEquals(p2, terminal2.getP(), tol);
assertEquals(q2, terminal2.getQ(), tol);
return true;
}
}
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@
import com.powsybl.cgmes.conversion.Conversion;
import com.powsybl.iidm.network.Line;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.Terminal;
import com.powsybl.iidm.network.TwoSides;
import org.junit.jupiter.api.Test;

@@ -65,7 +66,7 @@ void importEqAndSshTogetherTest() {
}

@Test
void importEqAndTwoSshsTest() {
void importEqTwoSshsAndSvTest() {
Network network = readCgmesResources(DIR, "line_EQ.xml");
assertEquals(3, network.getLineCount());

@@ -79,6 +80,11 @@ void importEqAndTwoSshsTest() {

readCgmesResources(network, DIR, "line_SSH_1.xml");
assertTrue(checkSsh1(acLineSegment, equivalentBranch, seriesCompensator));

readCgmesResources(network, DIR, "line_SV.xml");
assertTrue(checkFlows(acLineSegment.getTerminal1(), 275.0, 50.0, acLineSegment.getTerminal2(), -275.1, -50.1));
assertTrue(checkFlows(equivalentBranch.getTerminal1(), 175.0, 40.0, equivalentBranch.getTerminal2(), -175.1, -40.1));
assertTrue(checkFlows(seriesCompensator.getTerminal1(), 75.0, 30.0, seriesCompensator.getTerminal2(), -75.1, -30.1));
}

private static boolean checkEq(Line acLineSegment, Line equivalentBranch, Line seriesCompensator) {
@@ -186,4 +192,13 @@ private static boolean checkNotDefinedActivePowerLimits(Line line) {

private record CurrentLimit(double ptalValue, int tatlDuration, double tatlValue) {
}

private static boolean checkFlows(Terminal terminal1, double p1, double q1, Terminal terminal2, double p2, double q2) {
double tol = 0.0000001;
assertEquals(p1, terminal1.getP(), tol);
assertEquals(q1, terminal1.getQ(), tol);
assertEquals(p2, terminal2.getP(), tol);
assertEquals(q2, terminal2.getQ(), tol);
return true;
}
}
Loading