Skip to content

Commit

Permalink
Simplify LoadsMerger & LoadsToMerge
Browse files Browse the repository at this point in the history
Signed-off-by: Florian Dupuy <florian.dupuy@rte-france.com>
  • Loading branch information
flo-dup committed Feb 23, 2023
1 parent 76218c2 commit ecea720
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import com.google.common.collect.Iterables;
import com.powsybl.commons.PowsyblException;
import com.powsybl.dynawo.commons.loadmerge.LoadPowers;
import com.powsybl.dynawo.commons.loadmerge.LoadState;
import com.powsybl.dynawo.commons.loadmerge.LoadsMerger;
import com.powsybl.iidm.network.*;
import org.slf4j.Logger;
Expand Down Expand Up @@ -124,14 +123,16 @@ private static void update(Terminal target, Terminal source) {
target.setQ(source.getQ());
if (source.isConnected()) {
target.connect();
} else if (!source.isConnected()) {
} else {
target.disconnect();
}
}

private static void update(Terminal target, Terminal mergedSource, LoadState mergedLoadState) {
target.setP(mergedSource.getP() * target.getP() / mergedLoadState.getP());
target.setQ(mergedSource.getQ() * target.getQ() / mergedLoadState.getQ());
private static void update(Terminal target, Terminal mergedSource, double targetGroupP, double targetGroupQ) {
double pRatio = target.getP() / targetGroupP;
double qRatio = target.getQ() / targetGroupQ;
target.setP(mergedSource.getP() * pRatio);
target.setQ(mergedSource.getQ() * qRatio);
if (mergedSource.isConnected()) {
target.connect();
} else {
Expand Down Expand Up @@ -159,15 +160,15 @@ private static void updateLoads(Bus busTarget, Bus busSource) {
}
Map<LoadPowers, Terminal> mergedLoadsTerminal = busSource.getLoadStream()
.collect(Collectors.toMap(LoadsMerger::getLoadPowers, Load::getTerminal));
LoadsMerger.getLoadsToMergeList(busTarget).forEach(unmergedLoads -> {
Terminal mergedLoadTerminal = Optional.ofNullable(mergedLoadsTerminal.get(unmergedLoads.getLoadPowers()))
LoadsMerger.getLoadPowersGrouping(busTarget).forEach((loadPowers, loadsGroup) -> {
Terminal mergedLoadTerminal = Optional.ofNullable(mergedLoadsTerminal.get(loadPowers))
.orElseThrow(() -> new PowsyblException("Missing merged load in bus " + busTarget.getId()));
for (Load load : unmergedLoads.getLoads()) {
if (unmergedLoads.isSingle()) {
update(load.getTerminal(), mergedLoadTerminal);
} else {
update(load.getTerminal(), mergedLoadTerminal, unmergedLoads.getMergedState());
}
if (loadsGroup.size() == 1) {
update(loadsGroup.get(0).getTerminal(), mergedLoadTerminal);
} else {
double groupP = loadsGroup.stream().map(Load::getTerminal).mapToDouble(Terminal::getP).sum();
double groupQ = loadsGroup.stream().map(Load::getTerminal).mapToDouble(Terminal::getQ).sum();
loadsGroup.forEach(load -> update(load.getTerminal(), mergedLoadTerminal, groupP, groupQ));
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@
import com.powsybl.iidm.xml.NetworkXml;

import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static com.powsybl.dynawo.commons.loadmerge.LoadPowers.*;
Expand All @@ -38,11 +40,11 @@ public static Network mergeLoads(Network network) throws PowsyblException {

for (LoadsToMerge loadsToMerge : loadsToMergeList) {
loadsToMerge.getLoads().forEach(Connectable::remove);
loadsToMerge.getLoadAdder().setP0(loadsToMerge.getMergedState().getP0());
loadsToMerge.getLoadAdder().setQ0(loadsToMerge.getMergedState().getQ0());
loadsToMerge.getLoadAdder().setP0(loadsToMerge.getMergedP0());
loadsToMerge.getLoadAdder().setQ0(loadsToMerge.getMergedQ0());
Load load = loadsToMerge.getLoadAdder().add();
load.getTerminal().setP(loadsToMerge.getMergedState().getP());
load.getTerminal().setQ(loadsToMerge.getMergedState().getQ());
load.getTerminal().setP(loadsToMerge.getMergedP());
load.getTerminal().setQ(loadsToMerge.getMergedQ());
}

return mergedLoadsNetwork;
Expand Down Expand Up @@ -72,57 +74,17 @@ private static LoadsToMerge mergeLoads(Bus bus, LoadsToMerge loadsToMerge) {
}

public static List<LoadsToMerge> getLoadsToMergeList(Bus bus) {

double[] pPosQPos = {0, 0, 0, 0};
double[] pPosQNeg = {0, 0, 0, 0};
double[] pNegQPos = {0, 0, 0, 0};
double[] pNegQNeg = {0, 0, 0, 0};
List<Load> pPosQPosLoads = new ArrayList<>();
List<Load> pPosQNegLoads = new ArrayList<>();
List<Load> pNegQPosLoads = new ArrayList<>();
List<Load> pNegQNegLoads = new ArrayList<>();

List<LoadsToMerge> loadsToMerge = new ArrayList<>();

for (Load load : bus.getLoads()) {
switch (getLoadPowers(load)) {
case P_POS_Q_POS:
addLoad(pPosQPos, pPosQPosLoads, load);
break;
case P_POS_Q_NEG:
addLoad(pPosQNeg, pPosQNegLoads, load);
break;
case P_NEG_Q_POS:
addLoad(pNegQPos, pNegQPosLoads, load);
break;
case P_NEG_Q_NEG:
addLoad(pNegQNeg, pNegQNegLoads, load);
break;
}
}

if (!pPosQPosLoads.isEmpty()) {
loadsToMerge.add(new LoadsToMerge(P_POS_Q_POS, LoadState.createLoadStateFromArray(pPosQPos), pPosQPosLoads, bus.getVoltageLevel()));
}
if (!pPosQNegLoads.isEmpty()) {
loadsToMerge.add(new LoadsToMerge(P_POS_Q_NEG, LoadState.createLoadStateFromArray(pPosQNeg), pPosQNegLoads, bus.getVoltageLevel()));
}
if (!pNegQPosLoads.isEmpty()) {
loadsToMerge.add(new LoadsToMerge(P_NEG_Q_POS, LoadState.createLoadStateFromArray(pNegQPos), pNegQPosLoads, bus.getVoltageLevel()));
}
if (!pNegQNegLoads.isEmpty()) {
loadsToMerge.add(new LoadsToMerge(P_NEG_Q_NEG, LoadState.createLoadStateFromArray(pNegQNeg), pNegQNegLoads, bus.getVoltageLevel()));
}

getLoadPowersGrouping(bus).forEach((loadPowers, loads) -> loadsToMerge.add(new LoadsToMerge(loadPowers, loads, bus.getVoltageLevel())));
return loadsToMerge;
}

private static void addLoad(double[] arr, List<Load> loadList, Load load) {
loadList.add(load);
arr[0] += load.getTerminal().getP();
arr[1] += load.getTerminal().getQ();
arr[2] += load.getP0();
arr[3] += load.getQ0();
public static Map<LoadPowers, List<Load>> getLoadPowersGrouping(Bus bus) {
EnumMap<LoadPowers, List<Load>> loadsGrouping = new EnumMap<>(LoadPowers.class);
for (Load load : bus.getLoads()) {
loadsGrouping.computeIfAbsent(getLoadPowers(load), k -> new ArrayList<>()).add(load);
}
return loadsGrouping;
}

public static LoadPowers getLoadPowers(Load load) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import com.powsybl.iidm.network.Load;
import com.powsybl.iidm.network.LoadAdder;
import com.powsybl.iidm.network.Terminal;
import com.powsybl.iidm.network.VoltageLevel;

import java.util.List;
Expand All @@ -18,23 +19,37 @@
*/
public class LoadsToMerge {
private final LoadPowers loadPowers;
private final LoadState mergedState;
private final List<Load> loads;
private final LoadAdder loadAdder;
private final double mergedP;
private final double mergedQ;

public LoadsToMerge(LoadPowers loadPowers, LoadState mergedState, List<Load> loads, VoltageLevel voltageLevel) {
public LoadsToMerge(LoadPowers loadPowers, List<Load> loads, VoltageLevel voltageLevel) {
this.loadPowers = loadPowers;
this.mergedState = mergedState;
this.loads = loads;
this.loadAdder = isSingle() ? null : voltageLevel.newLoad();
this.mergedP = loads.stream().map(Load::getTerminal).mapToDouble(Terminal::getP).sum();
this.mergedQ = loads.stream().map(Load::getTerminal).mapToDouble(Terminal::getQ).sum();
}

public LoadPowers getLoadPowers() {
return loadPowers;
}

public LoadState getMergedState() {
return mergedState;
public double getMergedP0() {
return loads.stream().mapToDouble(Load::getP0).sum();
}

public double getMergedQ0() {
return loads.stream().mapToDouble(Load::getQ0).sum();
}

public double getMergedP() {
return mergedP;
}

public double getMergedQ() {
return mergedQ;
}

public List<Load> getLoads() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.dynawo.commons.loadmerge;

import com.powsybl.commons.PowsyblException;
package com.powsybl.dynawo.commons;

/**
* @author Laurent Isertial <laurent.issertial at rte-france.com>
Expand All @@ -26,13 +24,6 @@ public LoadState(double p, double q, double p0, double q0) {
this.q0 = q0;
}

static LoadState createLoadStateFromArray(double[] arr) {
if (arr.length != 4) {
throw new PowsyblException("Wrong initialisation array size : " + arr.length);
}
return new LoadState(arr[0], arr[1], arr[2], arr[3]);
}

public double getP0() {
return p0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
*/
package com.powsybl.dynawo.commons;

import com.powsybl.dynawo.commons.loadmerge.LoadState;
import com.powsybl.dynawo.commons.loadmerge.LoadsMerger;
import com.powsybl.iidm.network.Network;
import org.junit.Test;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
*/
package com.powsybl.dynawo.commons;

import com.powsybl.dynawo.commons.loadmerge.LoadState;
import com.powsybl.iidm.network.*;

import java.util.List;
Expand Down

0 comments on commit ecea720

Please sign in to comment.