Skip to content

Commit

Permalink
add line builder from existing line
Browse files Browse the repository at this point in the history
Signed-off-by: CHIQUET Benoit <benoit.chiquet@rte-france.com>
  • Loading branch information
bc-rte committed Sep 4, 2024
1 parent 45879cd commit cd5ce9d
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,30 @@ public interface BranchAdder<T extends Branch<? super T> & Connectable<? super T

A setConnectableBus2(String connectableBus2);

default A setVoltageLevel(ThreeSides side, String id) {
switch (side) {
case ONE -> setVoltageLevel1(id);
case TWO -> setVoltageLevel2(id);
}
return (A) this;
}

default A setBus(ThreeSides side, String id) {
switch (side) {
case ONE -> setBus1(id);
case TWO -> setBus2(id);
}
return (A) this;
}

default A setConnectableBus(ThreeSides side, String id) {
switch (side) {
case ONE -> setConnectableBus1(id);
case TWO -> setConnectableBus2(id);
}
return (A) this;
}

@Override
T add();
}
29 changes: 29 additions & 0 deletions iidm/iidm-api/src/main/java/com/powsybl/iidm/network/Network.java
Original file line number Diff line number Diff line change
Expand Up @@ -784,6 +784,35 @@ default VoltageLevelAdder newVoltageLevelFrom(VoltageLevel voltagelevel) {
*/
LineAdder newLine();

/**
* Get a builder to create a new AC line from an existing line template.
* @return a builder to create a new line
*/
default LineAdder newLineFrom(Line copiedLine) {
LineAdder lineAdder = newLine()
.setR(copiedLine.getR())
.setX(copiedLine.getX())
.setG1(copiedLine.getG1())
.setB1(copiedLine.getB1())
.setG2(copiedLine.getG2())
.setB2(copiedLine.getB2());

copiedLine.getTerminals().forEach(terminal -> {
setSide(lineAdder, terminal);
});
return lineAdder;
}

private static void setSide(LineAdder addedLine, Terminal terminal) {
addedLine.setVoltageLevel(terminal.getSide(), terminal.getVoltageLevel().getId());
switch (terminal.getVoltageLevel().getTopologyKind()) {
case BUS_BREAKER -> {
addedLine.setBus(terminal.getSide(), terminal.getBusBreakerView().getBus().getId());
addedLine.setConnectableBus(terminal.getSide(), terminal.getBusBreakerView().getConnectableBus().getId());
}
}
}

/**
* Get all AC lines.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@
*/
package com.powsybl.iidm.network.impl.tck;

import com.powsybl.iidm.network.Country;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.Substation;
import com.powsybl.iidm.network.VoltageLevel;
import com.powsybl.iidm.network.*;
import com.powsybl.iidm.network.tck.AbstractNetworkTest;
import org.junit.jupiter.api.Test;

import java.util.Optional;
import java.util.Set;

import static com.powsybl.iidm.network.TopologyKind.BUS_BREAKER;
Expand Down Expand Up @@ -65,4 +63,110 @@ void shouldReuseInfoWhenCreatingVoltageLevelFromTemplate() {
assertEquals(200, newVoltageLevel.getLowVoltageLimit());
assertEquals(250, newVoltageLevel.getHighVoltageLimit());
}

@Test
void shouldReuseInfoWhenCreatingLineFromTemplateInBusBreakerView() {
Network network = Network.create("test", "test");
VoltageLevel vl1 = network.newVoltageLevel()
.setId("vl1")
.setTopologyKind(BUS_BREAKER)
.setName("name")
.setNominalV(225)
.setLowVoltageLimit(200)
.setHighVoltageLimit(250)
.add();
vl1.getBusBreakerView().newBus().setId("bus1").add();
VoltageLevel vl2 = network.newVoltageLevel()
.setId("vl2")
.setTopologyKind(BUS_BREAKER)
.setName("name")
.setNominalV(225)
.setLowVoltageLimit(200)
.setHighVoltageLimit(250)
.add();
vl2.getBusBreakerView().newBus().setId("bus2").add();
network.newLine()
.setId("existingLine")
.setName("name")
.setR(12)
.setX(24)
.setG1(100)
.setB1(10)
.setG2(200)
.setB2(20)
.setBus1("bus1")
.setBus2("bus2")
.add();

network.newLineFrom(network.getLine("existingLine"))
.setId("newLine")
.add();

Line newLine = network.getLine("newLine");
assertEquals(Optional.empty(), newLine.getOptionalName());
assertEquals(12, newLine.getR());
assertEquals(24, newLine.getX());
assertEquals(100, newLine.getG1());
assertEquals(10, newLine.getB1());
assertEquals(200, newLine.getG2());
assertEquals(20, newLine.getB2());
assertEquals("vl1", newLine.getTerminal1().getVoltageLevel().getId());
assertEquals("vl2", newLine.getTerminal2().getVoltageLevel().getId());
assertEquals("bus1", newLine.getTerminal1().getBusBreakerView().getBus().getId());
assertEquals("bus2", newLine.getTerminal2().getBusBreakerView().getBus().getId());
}

@Test
void shouldReuseInfoWhenCreatingLineFromTemplateMixedView() {
Network network = Network.create("test", "test");
VoltageLevel vl1 = network.newVoltageLevel()
.setId("vl1")
.setTopologyKind(TopologyKind.NODE_BREAKER)
.setName("name")
.setNominalV(225)
.setLowVoltageLimit(200)
.setHighVoltageLimit(250)
.add();
vl1.getNodeBreakerView().newBusbarSection().setId("bus1").setNode(0).add();
VoltageLevel vl2 = network.newVoltageLevel()
.setId("vl2")
.setTopologyKind(BUS_BREAKER)
.setName("name")
.setNominalV(225)
.setLowVoltageLimit(200)
.setHighVoltageLimit(250)
.add();
vl2.getBusBreakerView().newBus().setId("bus2").add();
network.newLine()
.setId("existingLine")
.setName("name")
.setR(12)
.setX(24)
.setG1(100)
.setB1(10)
.setG2(200)
.setB2(20)
.setVoltageLevel1("vl1")
.setNode1(1)
.setBus2("bus2")
.add();

network.newLineFrom(network.getLine("existingLine"))
.setId("newLine")
.setNode1(2)
.add();

Line newLine = network.getLine("newLine");
assertEquals(Optional.empty(), newLine.getOptionalName());
assertEquals(12, newLine.getR());
assertEquals(24, newLine.getX());
assertEquals(100, newLine.getG1());
assertEquals(10, newLine.getB1());
assertEquals(200, newLine.getG2());
assertEquals(20, newLine.getB2());
assertEquals("vl1", newLine.getTerminal1().getVoltageLevel().getId());
assertEquals("vl2", newLine.getTerminal2().getVoltageLevel().getId());
assertEquals(2, newLine.getTerminal1().getNodeBreakerView().getNode());
assertEquals("bus2", newLine.getTerminal2().getBusBreakerView().getBus().getId());
}
}

0 comments on commit cd5ce9d

Please sign in to comment.