LoadsToMerge.java
/**
* Copyright (c) 2023, RTE (http://www.rte-france.com/)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* 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.iidm.network.*;
import java.util.List;
/**
* @author Laurent Isertial {@literal <laurent.issertial at rte-france.com>}
*/
public class LoadsToMerge {
private static final String MERGE_LOAD_PREFIX_ID = "merged_load_.";
private final List<Load> loads;
private final LoadAdder loadAdder;
private final double mergedP;
private final double mergedQ;
private final double mergedP0;
private final double mergedQ0;
public LoadsToMerge(LoadPowersSigns loadPowersSigns, List<Load> loads, Bus bus) {
this.loads = loads;
this.loadAdder = createLoadAdder(loads, loadPowersSigns, bus);
this.mergedP = loads.stream().map(Load::getTerminal).mapToDouble(Terminal::getP).sum();
this.mergedQ = loads.stream().map(Load::getTerminal).mapToDouble(Terminal::getQ).sum();
this.mergedP0 = loads.stream().mapToDouble(Load::getP0).sum();
this.mergedQ0 = loads.stream().mapToDouble(Load::getQ0).sum();
}
private static LoadAdder createLoadAdder(List<Load> loads, LoadPowersSigns loadPowersSigns, Bus bus) {
LoadAdder loadAdder = bus.getVoltageLevel().newLoad();
loadAdder.setId(MERGE_LOAD_PREFIX_ID + bus.getId() + loadPowersSigns.getMergeLoadSuffixId());
loadAdder.setLoadType(LoadType.UNDEFINED);
TopologyKind topologyKind = bus.getVoltageLevel().getTopologyKind();
if (TopologyKind.BUS_BREAKER.equals(topologyKind)) {
loadAdder.setBus(bus.getId());
loadAdder.setConnectableBus(bus.getId());
} else if (TopologyKind.NODE_BREAKER.equals(topologyKind)) {
loadAdder.setNode(loads.get(0).getTerminal().getNodeBreakerView().getNode());
}
return loadAdder;
}
public void merge() {
loads.forEach(Connectable::remove);
loads.clear();
Load load = loadAdder
.setP0(mergedP0)
.setQ0(mergedQ0)
.add();
load.getTerminal().setP(mergedP);
load.getTerminal().setQ(mergedQ);
}
}