Skip to content

Commit

Permalink
Merge branch 'main' into add-multi-substation-layout
Browse files Browse the repository at this point in the history
  • Loading branch information
EtienneLt authored Feb 16, 2024
2 parents a3a6e97 + 4ff1561 commit f8bec0b
Show file tree
Hide file tree
Showing 23 changed files with 427 additions and 291 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import com.powsybl.iidm.network.BranchAdder;
import com.powsybl.iidm.network.Network;

import java.util.Optional;

import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;

/**
Expand Down Expand Up @@ -58,6 +60,10 @@ protected void setBranchAttributes(BranchAdder<?, ?> adder, int row) {
applyIfPresent(nodes2, row, adder::setNode2);
}

abstract BranchAdder create(Network network, int row);
BranchAdder create(Network network, int row) {
return create(network, row, true).orElseThrow();
}

abstract Optional<BranchAdder> create(Network network, int row, boolean throwException);

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,28 @@
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.extensions.ConnectablePosition;

import java.util.Optional;

import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;

public abstract class AbstractFeederBaysSeries {

abstract AbstractBranchSeries createTypedSeries(UpdatingDataframe dataframe);

public CreateBranchFeederBaysBuilder createBuilder(Network n, UpdatingDataframe dataframe, int row) {
public Optional<CreateBranchFeederBaysBuilder> createBuilder(Network n, UpdatingDataframe dataframe, int row, boolean throwException) {
AbstractBranchSeries series = createTypedSeries(dataframe);
CreateBranchFeederBaysBuilder builder = new CreateBranchFeederBaysBuilder();
BranchAdder<?, ?> lAdder = series.create(n, row);
builder.withBranchAdder(lAdder);
applyIfPresent(dataframe.getStrings("bus_or_busbar_section_id_1"), row, builder::withBusOrBusbarSectionId1);
applyIfPresent(dataframe.getStrings("bus_or_busbar_section_id_2"), row, builder::withBusOrBusbarSectionId2);
applyIfPresent(dataframe.getInts("position_order_1"), row, builder::withPositionOrder1);
applyIfPresent(dataframe.getInts("position_order_2"), row, builder::withPositionOrder2);
applyIfPresent(dataframe.getStrings("direction_1"), row, ConnectablePosition.Direction.class, builder::withDirection1);
applyIfPresent(dataframe.getStrings("direction_2"), row, ConnectablePosition.Direction.class, builder::withDirection2);
return builder;
Optional<BranchAdder> lineAdder = series.create(n, row, throwException);
if (lineAdder.isPresent()) {
builder.withBranchAdder(lineAdder.get());
applyIfPresent(dataframe.getStrings("bus_or_busbar_section_id_1"), row, builder::withBusOrBusbarSectionId1);
applyIfPresent(dataframe.getStrings("bus_or_busbar_section_id_2"), row, builder::withBusOrBusbarSectionId2);
applyIfPresent(dataframe.getInts("position_order_1"), row, builder::withPositionOrder1);
applyIfPresent(dataframe.getInts("position_order_2"), row, builder::withPositionOrder2);
applyIfPresent(dataframe.getStrings("direction_1"), row, ConnectablePosition.Direction.class, builder::withDirection1);
applyIfPresent(dataframe.getStrings("direction_2"), row, ConnectablePosition.Direction.class, builder::withDirection2);
return Optional.of(builder);
}
return Optional.empty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,30 +38,30 @@ public void addElementsWithBay(Network network, UpdatingDataframe dataframe, boo
}

public void addElements(Network network, UpdatingDataframe dataframe) {
addElements(network, dataframe, (n, df, adder, row, throwException, reporter) -> add(adder), false, Reporter.NO_OP);
addElements(network, dataframe, (n, df, adder, row, throwException, reporter) -> add(adder), true, Reporter.NO_OP);
}

void addElements(Network network, UpdatingDataframe dataframe, AbstractSimpleAdder.AdditionStrategy addition, boolean throwException, Reporter reporter) {
//do nothing
}

private void add(InjectionAdder<?, ?> injectionAdder) {
if (injectionAdder instanceof LoadAdder) {
((LoadAdder) injectionAdder).add();
} else if (injectionAdder instanceof BatteryAdder) {
((BatteryAdder) injectionAdder).add();
} else if (injectionAdder instanceof DanglingLineAdder) {
((DanglingLineAdder) injectionAdder).add();
} else if (injectionAdder instanceof GeneratorAdder) {
((GeneratorAdder) injectionAdder).add();
} else if (injectionAdder instanceof ShuntCompensatorAdder) {
((ShuntCompensatorAdder) injectionAdder).add();
} else if (injectionAdder instanceof StaticVarCompensatorAdder) {
((StaticVarCompensatorAdder) injectionAdder).add();
} else if (injectionAdder instanceof LccConverterStationAdder) {
((LccConverterStationAdder) injectionAdder).add();
} else if (injectionAdder instanceof VscConverterStationAdder) {
((VscConverterStationAdder) injectionAdder).add();
if (injectionAdder instanceof LoadAdder loadAdder) {
loadAdder.add();
} else if (injectionAdder instanceof BatteryAdder batteryAdder) {
batteryAdder.add();
} else if (injectionAdder instanceof DanglingLineAdder danglingLineAdder) {
danglingLineAdder.add();
} else if (injectionAdder instanceof GeneratorAdder generatorAdder) {
generatorAdder.add();
} else if (injectionAdder instanceof ShuntCompensatorAdder shuntCompensatorAdder) {
shuntCompensatorAdder.add();
} else if (injectionAdder instanceof StaticVarCompensatorAdder staticVarCompensatorAdder) {
staticVarCompensatorAdder.add();
} else if (injectionAdder instanceof LccConverterStationAdder lccConverterStationAdder) {
lccConverterStationAdder.add();
} else if (injectionAdder instanceof VscConverterStationAdder vscConverterStationAdder) {
vscConverterStationAdder.add();
} else {
throw new AssertionError("Given InjectionAdder not supported: " + injectionAdder.getClass().getName());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import com.powsybl.dataframe.update.UpdatingDataframe;
import com.powsybl.iidm.network.BatteryAdder;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.VoltageLevel;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import static com.powsybl.dataframe.network.adders.NetworkUtils.getVoltageLevelOrThrowWithBusOrBusbarSectionId;
import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;
Expand Down Expand Up @@ -65,24 +67,30 @@ private static class BatterySeries extends InjectionSeries {
this.busOrBusbarSections = dataframe.getStrings("bus_or_busbar_section_id");
}

BatteryAdder createAdder(Network network, int row) {
BatteryAdder batteryAdder = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections)
.newBattery();
setInjectionAttributes(batteryAdder, row);
applyIfPresent(maxP, row, batteryAdder::setMaxP);
applyIfPresent(minP, row, batteryAdder::setMinP);
applyIfPresent(targetP, row, batteryAdder::setTargetP);
applyIfPresent(targetQ, row, batteryAdder::setTargetQ);
return batteryAdder;
Optional<BatteryAdder> createAdder(Network network, int row, boolean throwException) {
Optional<VoltageLevel> vl = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections, throwException);
if (vl.isPresent()) {
BatteryAdder batteryAdder = vl.get().newBattery();
setInjectionAttributes(batteryAdder, row);
applyIfPresent(maxP, row, batteryAdder::setMaxP);
applyIfPresent(minP, row, batteryAdder::setMinP);
applyIfPresent(targetP, row, batteryAdder::setTargetP);
applyIfPresent(targetQ, row, batteryAdder::setTargetQ);
return Optional.of(batteryAdder);
} else {
return Optional.empty();
}
}
}

@Override
public void addElements(Network network, UpdatingDataframe dataframe, AdditionStrategy addition, boolean throwException, Reporter reporter) {
BatterySeries series = new BatterySeries(dataframe);
for (int row = 0; row < dataframe.getRowCount(); row++) {
BatteryAdder adder = series.createAdder(network, row);
addition.add(network, dataframe, adder, row, throwException, reporter);
Optional<BatteryAdder> adder = series.createAdder(network, row, throwException);
if (adder.isPresent()) {
addition.add(network, dataframe, adder.get(), row, throwException, reporter);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import com.powsybl.dataframe.update.UpdatingDataframe;
import com.powsybl.iidm.network.DanglingLineAdder;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.VoltageLevel;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import static com.powsybl.dataframe.network.adders.NetworkUtils.getVoltageLevelOrThrowWithBusOrBusbarSectionId;
import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;
Expand All @@ -28,19 +30,19 @@
public class DanglingLineDataframeAdder extends AbstractSimpleAdder {

private static final List<SeriesMetadata> METADATA = List.of(
SeriesMetadata.stringIndex("id"),
SeriesMetadata.strings("voltage_level_id"),
SeriesMetadata.strings("bus_id"),
SeriesMetadata.strings("connectable_bus_id"),
SeriesMetadata.ints("node"),
SeriesMetadata.strings("name"),
SeriesMetadata.doubles("p0"),
SeriesMetadata.doubles("q0"),
SeriesMetadata.doubles("r"),
SeriesMetadata.doubles("x"),
SeriesMetadata.doubles("g"),
SeriesMetadata.doubles("b"),
SeriesMetadata.strings("pairing_key")
SeriesMetadata.stringIndex("id"),
SeriesMetadata.strings("voltage_level_id"),
SeriesMetadata.strings("bus_id"),
SeriesMetadata.strings("connectable_bus_id"),
SeriesMetadata.ints("node"),
SeriesMetadata.strings("name"),
SeriesMetadata.doubles("p0"),
SeriesMetadata.doubles("q0"),
SeriesMetadata.doubles("r"),
SeriesMetadata.doubles("x"),
SeriesMetadata.doubles("g"),
SeriesMetadata.doubles("b"),
SeriesMetadata.strings("pairing_key")
);

@Override
Expand Down Expand Up @@ -73,27 +75,34 @@ private static class DanglingLineSeries extends InjectionSeries {
this.pairingKey = dataframe.getStrings("pairing_key");
}

DanglingLineAdder createAdder(Network network, int row) {
DanglingLineAdder adder = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections)
.newDanglingLine();
setInjectionAttributes(adder, row);
applyIfPresent(p0, row, adder::setP0);
applyIfPresent(q0, row, adder::setQ0);
applyIfPresent(r, row, adder::setR);
applyIfPresent(x, row, adder::setX);
applyIfPresent(g, row, adder::setG);
applyIfPresent(b, row, adder::setB);
applyIfPresent(pairingKey, row, adder::setPairingKey);
return adder;
Optional<DanglingLineAdder> createAdder(Network network, int row, boolean throwException) {
Optional<VoltageLevel> vl = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels,
busOrBusbarSections, throwException);
if (vl.isPresent()) {
DanglingLineAdder adder = vl.get().newDanglingLine();
setInjectionAttributes(adder, row);
applyIfPresent(p0, row, adder::setP0);
applyIfPresent(q0, row, adder::setQ0);
applyIfPresent(r, row, adder::setR);
applyIfPresent(x, row, adder::setX);
applyIfPresent(g, row, adder::setG);
applyIfPresent(b, row, adder::setB);
applyIfPresent(pairingKey, row, adder::setPairingKey);
return Optional.of(adder);
} else {
return Optional.empty();
}
}
}

@Override
public void addElements(Network network, UpdatingDataframe dataframe, AdditionStrategy additionStrategy, boolean throwException, Reporter reporter) {
DanglingLineSeries series = new DanglingLineSeries(dataframe);
for (int row = 0; row < dataframe.getRowCount(); row++) {
DanglingLineAdder adder = series.createAdder(network, row);
additionStrategy.add(network, dataframe, adder, row, throwException, reporter);
Optional<DanglingLineAdder> adder = series.createAdder(network, row, throwException);
if (adder.isPresent()) {
additionStrategy.add(network, dataframe, adder.get(), row, throwException, reporter);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import static com.powsybl.dataframe.network.adders.NetworkUtils.getVoltageLevelOrThrowWithBusOrBusbarSectionId;
import static com.powsybl.dataframe.network.adders.SeriesUtils.applyBooleanIfPresent;
Expand Down Expand Up @@ -80,31 +81,35 @@ private static class GeneratorSeries extends InjectionSeries {
this.regulatingElements = dataframe.getStrings("regulating_element_id");
}

GeneratorAdder createAdder(Network network, int row) {
GeneratorAdder adder = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections)
.newGenerator();

setInjectionAttributes(adder, row);
applyIfPresent(maxP, row, adder::setMaxP);
applyIfPresent(minP, row, adder::setMinP);
applyIfPresent(targetP, row, adder::setTargetP);
applyIfPresent(targetQ, row, adder::setTargetQ);
applyIfPresent(targetV, row, adder::setTargetV);
applyIfPresent(ratedS, row, adder::setRatedS);
applyBooleanIfPresent(voltageRegulatorOn, row, adder::setVoltageRegulatorOn);
applyIfPresent(energySource, row, EnergySource.class, adder::setEnergySource);
applyIfPresent(regulatingElements, row, elementId -> NetworkUtil
.setRegulatingTerminal(adder::setRegulatingTerminal, network, elementId));
return adder;
Optional<GeneratorAdder> createAdder(Network network, int row, boolean throwException) {
Optional<VoltageLevel> vl = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections, throwException);
if (vl.isPresent()) {
GeneratorAdder adder = vl.get().newGenerator();
setInjectionAttributes(adder, row);
applyIfPresent(maxP, row, adder::setMaxP);
applyIfPresent(minP, row, adder::setMinP);
applyIfPresent(targetP, row, adder::setTargetP);
applyIfPresent(targetQ, row, adder::setTargetQ);
applyIfPresent(targetV, row, adder::setTargetV);
applyIfPresent(ratedS, row, adder::setRatedS);
applyBooleanIfPresent(voltageRegulatorOn, row, adder::setVoltageRegulatorOn);
applyIfPresent(energySource, row, EnergySource.class, adder::setEnergySource);
applyIfPresent(regulatingElements, row, elementId -> NetworkUtil
.setRegulatingTerminal(adder::setRegulatingTerminal, network, elementId));
return Optional.of(adder);
}
return Optional.empty();
}
}

@Override
public void addElements(Network network, UpdatingDataframe dataframe, AdditionStrategy addition, boolean throwException, Reporter reporter) {
GeneratorSeries series = new GeneratorSeries(dataframe);
for (int row = 0; row < dataframe.getRowCount(); row++) {
GeneratorAdder adder = series.createAdder(network, row);
addition.add(network, dataframe, adder, row, throwException, reporter);
Optional<GeneratorAdder> adder = series.createAdder(network, row, throwException);
if (adder.isPresent()) {
addition.add(network, dataframe, adder.get(), row, throwException, reporter);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
import com.powsybl.dataframe.update.UpdatingDataframe;
import com.powsybl.iidm.network.LccConverterStationAdder;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.VoltageLevel;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import static com.powsybl.dataframe.network.adders.NetworkUtils.getVoltageLevelOrThrowWithBusOrBusbarSectionId;
import static com.powsybl.dataframe.network.adders.SeriesUtils.applyIfPresent;
Expand Down Expand Up @@ -58,22 +60,27 @@ private static class LccStationSeries extends InjectionSeries {
this.busOrBusbarSections = dataframe.getStrings("bus_or_busbar_section_id");
}

LccConverterStationAdder createAdder(Network network, int row) {
LccConverterStationAdder adder = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections)
.newLccConverterStation();
setInjectionAttributes(adder, row);
applyIfPresent(lossFactors, row, f -> adder.setLossFactor((float) f));
applyIfPresent(powerFactors, row, f -> adder.setPowerFactor((float) f));
return adder;
Optional<LccConverterStationAdder> createAdder(Network network, int row, boolean throwException) {
Optional<VoltageLevel> vl = getVoltageLevelOrThrowWithBusOrBusbarSectionId(network, row, voltageLevels, busOrBusbarSections, throwException);
if (vl.isPresent()) {
LccConverterStationAdder adder = vl.get().newLccConverterStation();
setInjectionAttributes(adder, row);
applyIfPresent(lossFactors, row, f -> adder.setLossFactor((float) f));
applyIfPresent(powerFactors, row, f -> adder.setPowerFactor((float) f));
return Optional.of(adder);
}
return Optional.empty();
}
}

@Override
public void addElements(Network network, UpdatingDataframe dataframe, AdditionStrategy additionStrategy, boolean throwException, Reporter reporter) {
LccStationSeries series = new LccStationSeries(dataframe);
for (int row = 0; row < dataframe.getRowCount(); row++) {
LccConverterStationAdder adder = series.createAdder(network, row);
additionStrategy.add(network, dataframe, adder, row, throwException, reporter);
Optional<LccConverterStationAdder> adder = series.createAdder(network, row, throwException);
if (adder.isPresent()) {
additionStrategy.add(network, dataframe, adder.get(), row, throwException, reporter);
}
}
}
}
Loading

0 comments on commit f8bec0b

Please sign in to comment.