Skip to content

Commit

Permalink
first draft on adding nested CurrentLimitAdder on LineAdder
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 6, 2024
1 parent 2c7faf2 commit 4bfb458
Show file tree
Hide file tree
Showing 11 changed files with 200 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.powsybl.iidm.network;

public interface AdderUser<ChildAdder> {
void collectAdder(ChildAdder childAdder);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.powsybl.iidm.network;

public interface CurrentLimitsNestedAdder<ParentAdder extends AdderUser<CurrentLimitsNestedAdder<ParentAdder>>>
extends NestedAdder<ParentAdder, CurrentLimitsNestedAdder<ParentAdder>>,
CurrentLimitsPayload<CurrentLimitsNestedAdder<ParentAdder>>,
AdderUser<TemporaryLimitNestedAdder<CurrentLimitsNestedAdder<ParentAdder>>> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.powsybl.iidm.network;

public interface CurrentLimitsPayload<ExtendingAdder extends AdderUser<TemporaryLimitNestedAdder<ExtendingAdder>>> {
ExtendingAdder setPermanentLimit(double permanentLimit);

double getPermanentLimit();

CurrentLimitsAdder fill(CurrentLimitsAdder adder);

TemporaryLimitNestedAdder<ExtendingAdder> beginTemporaryLimit();
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* @see Line
* @see Network
*/
public interface LineAdder extends BranchAdder<Line, LineAdder> {
public interface LineAdder extends BranchAdder<Line, LineAdder>, AdderUser<CurrentLimitsNestedAdder<LineAdder>> {

LineAdder setR(double r);

Expand All @@ -38,6 +38,8 @@ public interface LineAdder extends BranchAdder<Line, LineAdder> {

LineAdder setB2(double b2);

CurrentLimitsNestedAdder<LineAdder> beginCurrentLimits();

@Override
Line add();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.powsybl.iidm.network;

public interface NestedAdder<ParentAdder extends AdderUser<ExtendingAdder>, ExtendingAdder> {
ParentAdder end();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.powsybl.iidm.network;

public interface TemporaryLimitNestedAdder<ParentAdder extends AdderUser<TemporaryLimitNestedAdder<ParentAdder>>>
extends NestedAdder<ParentAdder, TemporaryLimitNestedAdder<ParentAdder>>,
TemporaryLimitPayload<TemporaryLimitNestedAdder<ParentAdder>> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.powsybl.iidm.network;

public interface TemporaryLimitPayload<ExtendingAdder> {
ExtendingAdder setName(String name);

String getName();

LoadingLimitsAdder.TemporaryLimitAdder<CurrentLimitsAdder> fill(LoadingLimitsAdder.TemporaryLimitAdder<CurrentLimitsAdder> adder);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.powsybl.iidm.network.impl;

import com.powsybl.iidm.network.AdderUser;
import com.powsybl.iidm.network.CurrentLimitsAdder;
import com.powsybl.iidm.network.CurrentLimitsNestedAdder;
import com.powsybl.iidm.network.TemporaryLimitNestedAdder;

import java.util.ArrayList;
import java.util.List;

public class CurrentLimitsNestedAdderImpl<ParentAdder extends AdderUser<CurrentLimitsNestedAdder<ParentAdder>>>
implements CurrentLimitsNestedAdder<ParentAdder>,
AdderUser<TemporaryLimitNestedAdder<CurrentLimitsNestedAdder<ParentAdder>>> {
private ParentAdder parentAdder;
private double permanentLimit;
private List<TemporaryLimitNestedAdder<CurrentLimitsNestedAdder<ParentAdder>>> temporaryLimits = new ArrayList<>();

public CurrentLimitsNestedAdderImpl(ParentAdder parentAdder) {
this.parentAdder = parentAdder;
}

@Override
public CurrentLimitsNestedAdder<ParentAdder> setPermanentLimit(double permanentLimit) {
this.permanentLimit = permanentLimit;
return this;
}

@Override
public double getPermanentLimit() {
return this.permanentLimit;
}

@Override
public CurrentLimitsAdder fill(CurrentLimitsAdder adder) {
adder.setPermanentLimit(this.permanentLimit);
temporaryLimits.forEach(limit -> limit.fill(adder.beginTemporaryLimit()).endTemporaryLimit());
return adder;
}

@Override
public TemporaryLimitNestedAdder<CurrentLimitsNestedAdder<ParentAdder>> beginTemporaryLimit() {
return new TemporaryLimitNestedAdderImpl(this);
}

@Override
public ParentAdder end() {
parentAdder.collectAdder(this);
return parentAdder;
}

@Override
public void collectAdder(TemporaryLimitNestedAdder<CurrentLimitsNestedAdder<ParentAdder>> adder) {
this.temporaryLimits.add(adder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,16 @@
*/
package com.powsybl.iidm.network.impl;

import com.powsybl.iidm.network.LineAdder;
import com.powsybl.iidm.network.ValidationException;
import com.powsybl.iidm.network.ValidationUtil;
import com.powsybl.iidm.network.*;
import com.powsybl.commons.ref.Ref;

import java.util.Optional;

/**
*
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
class LineAdderImpl extends AbstractBranchAdder<LineAdderImpl> implements LineAdder {
class LineAdderImpl extends AbstractBranchAdder<LineAdderImpl> implements LineAdder, AdderUser<CurrentLimitsNestedAdder<LineAdder>> {

private final NetworkImpl network;
private final String subnetwork;
Expand All @@ -32,6 +32,7 @@ class LineAdderImpl extends AbstractBranchAdder<LineAdderImpl> implements LineAd
private double g2 = 0.0;

private double b2 = 0.0;
private Optional<CurrentLimitsNestedAdder<LineAdder>> currentLimitsNestedAdder = Optional.empty();

LineAdderImpl(NetworkImpl network, String subnetwork) {
this.network = network;
Expand Down Expand Up @@ -84,6 +85,11 @@ public LineAdderImpl setB2(double b2) {
return this;
}

@Override
public CurrentLimitsNestedAdder<LineAdder> beginCurrentLimits() {
return new CurrentLimitsNestedAdderImpl(this);
}

@Override
public LineImpl add() {
String id = checkAndGetUniqueId();
Expand Down Expand Up @@ -118,7 +124,12 @@ public LineImpl add() {
voltageLevel2.attach(terminal2, false);
network.getIndex().checkAndAdd(line);
getNetwork().getListeners().notifyCreation(line);
this.currentLimitsNestedAdder.map(adder -> adder.fill(line.newCurrentLimits1()).add());
return line;
}

@Override
public void collectAdder(CurrentLimitsNestedAdder<LineAdder> currentLimitsNestedAdder) {
this.currentLimitsNestedAdder = Optional.of(currentLimitsNestedAdder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.powsybl.iidm.network.impl;

import com.powsybl.iidm.network.AdderUser;
import com.powsybl.iidm.network.CurrentLimitsAdder;
import com.powsybl.iidm.network.LoadingLimitsAdder;
import com.powsybl.iidm.network.TemporaryLimitNestedAdder;

public class TemporaryLimitNestedAdderImpl<ParentAdder extends AdderUser<TemporaryLimitNestedAdder<ParentAdder>>>
implements TemporaryLimitNestedAdder<ParentAdder> {
private String name;
private ParentAdder parentAdder;

public TemporaryLimitNestedAdderImpl(ParentAdder parentAdder) {
this.parentAdder = parentAdder;
}

@Override
public ParentAdder end() {
parentAdder.collectAdder(this);
return parentAdder;
}

@Override
public TemporaryLimitNestedAdder<ParentAdder> setName(String name) {
this.name = name;
return (TemporaryLimitNestedAdder<ParentAdder>) this;
}

@Override
public String getName() {
return name;
}

@Override
public LoadingLimitsAdder.TemporaryLimitAdder<CurrentLimitsAdder> fill(LoadingLimitsAdder.TemporaryLimitAdder<CurrentLimitsAdder> adder) {
return adder.setName(name);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -169,4 +169,50 @@ void shouldReuseInfoWhenCreatingLineFromTemplateMixedView() {
assertEquals(2, newLine.getTerminal1().getNodeBreakerView().getNode());
assertEquals("bus2", newLine.getTerminal2().getBusBreakerView().getBus().getId());
}

@Test
void canCreateNestedCurrentLimitUsingLineAdder() {
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();
try {
network.newLine()
.setId("existingLine")
.setName("name")
.setR(12)
.setX(24)
.setG1(100)
.setB1(10)
.setG2(200)
.setB2(20)
.setBus1("bus1")
.setBus2("bus2")
.beginCurrentLimits()
.setPermanentLimit(4)
.beginTemporaryLimit()
.setName("tutu")
.end()
.end()
.add();
} catch (Exception e) {
System.out.println(e);
// adders will throw because they are not completely implemented
}
}
}

0 comments on commit 4bfb458

Please sign in to comment.