Skip to content

Commit

Permalink
add reactive capability curve builder using existing reactive capabil…
Browse files Browse the repository at this point in the history
…ity curve as template

Signed-off-by: CHIQUET Benoit <benoit.chiquet@rte-france.com>
  • Loading branch information
bc-rte committed Sep 16, 2024
1 parent 15bc14a commit 0020882
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,20 @@ public interface ReactiveLimitsHolder {
* to this generator.
*/
MinMaxReactiveLimitsAdder newMinMaxReactiveLimits();

/**
* Get a builder to create and associate a new reactive capability curve
* to this generator based on an existing curve.
*/
default ReactiveCapabilityCurveAdder newReactiveCapabilityCurveFrom(ReactiveCapabilityCurve copiedCurve) {
ReactiveCapabilityCurveAdder adder = newReactiveCapabilityCurve();
copiedCurve.getPoints().forEach(copiedPoint -> {
adder.beginPoint()
.setP(copiedPoint.getP())
.setMinQ(copiedPoint.getMinQ())
.setMaxQ(copiedPoint.getMaxQ())
.endPoint();
});
return adder;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@
import com.powsybl.iidm.network.Generator;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.ReactiveCapabilityCurve;
import com.powsybl.iidm.network.ReactiveLimitsKind;
import com.powsybl.iidm.network.ValidationException;
import com.powsybl.iidm.network.test.FictitiousSwitchFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import java.util.Optional;

import static com.powsybl.iidm.network.ReactiveLimitsKind.CURVE;
import static org.junit.jupiter.api.Assertions.*;

public abstract class AbstractReactiveCapabilityCurveTest {
Expand Down Expand Up @@ -48,7 +50,7 @@ public void testAdder() {
.setMinQ(2.0)
.endPoint()
.add();
assertEquals(ReactiveLimitsKind.CURVE, reactiveCapabilityCurve.getKind());
assertEquals(CURVE, reactiveCapabilityCurve.getKind());
assertEquals(100.0, reactiveCapabilityCurve.getMaxP(), 0.0);
assertEquals(1.0, reactiveCapabilityCurve.getMinP(), 0.0);
assertEquals(3, reactiveCapabilityCurve.getPoints().size());
Expand Down Expand Up @@ -134,4 +136,33 @@ public void invalidMinQGreaterThanMaxQ() {
assertTrue(e.getMessage().contains("maximum reactive power is expected to be greater than or equal to minimum reactive power"));
}

@Test
void shouldCopyDataWhenCreatingReactiveCapabilityCurveFromTemplate() {
ReactiveCapabilityCurve copiedCurve = generator.newReactiveCapabilityCurve()
.beginPoint()
.setP(1)
.setMinQ(5)
.setMaxQ(50)
.endPoint()
.beginPoint()
.setP(2)
.setMinQ(7)
.setMaxQ(70)
.endPoint()
.add();
Generator anotherGenerator = generator.getNetwork().getGenerator("CC");

anotherGenerator.newReactiveCapabilityCurveFrom(copiedCurve)
.add();

copiedCurve.getPoints().forEach(copiedPoint -> {
Optional<ReactiveCapabilityCurve.Point> pastedPoint = anotherGenerator.getReactiveLimits(ReactiveCapabilityCurve.class).getPoints().stream()
.filter(point -> point.getP() == copiedPoint.getP())
.findFirst();
assertTrue(pastedPoint.isPresent());
assertEquals(copiedPoint.getMinQ(), pastedPoint.get().getMinQ());
assertEquals(copiedPoint.getMaxQ(), pastedPoint.get().getMaxQ());
});

}
}

0 comments on commit 0020882

Please sign in to comment.