Skip to content

Commit

Permalink
Fix issues
Browse files Browse the repository at this point in the history
Signed-off-by: marquesja1 <[email protected]>
  • Loading branch information
marqueslanauja committed Mar 5, 2025
1 parent cb88a78 commit 0780f71
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,22 @@ private ContainersMapping defineContainersMapping(PssePowerFlowModel psseModel,
List<Edge> edges = new ArrayList<>();
// only zeroImpedance Lines are necessary and as they are not allowed, nothing to do

defineEdgesForTransformers(psseModel, busNumToPsseBus, edges);
// buses inside a psse substation are connected in the same way as transformers
defineEdgesForBusesInsideSubstation(nodeBreakerValidation, edges);

return ContainersMapping.create(psseModel.getBuses(), edges,
PsseBus::getI,
Edge::bus1,
Edge::bus2,
Edge::zeroImpedance,
Edge::transformer,
busNumber -> getNominalVFromBusNumber(busNumToPsseBus, busNumber, perUnitContext),
AbstractConverter::getVoltageLevelId,
substationNums -> getSubstationId(nodeBreakerValidation, substationNums));
}

private void defineEdgesForTransformers(PssePowerFlowModel psseModel, Map<Integer, PsseBus> busNumToPsseBus, List<Edge> edges) {
psseModel.getTransformers().forEach(t -> {
if (t.getK() == 0) { // twoWindingsTransformers with zero impedance are not allowed
if (busNumToPsseBus.containsKey(t.getI()) && busNumToPsseBus.containsKey(t.getJ())) {
Expand All @@ -260,7 +276,9 @@ private ContainersMapping defineContainersMapping(PssePowerFlowModel psseModel,
}
}
});
// buses inside a psse substation are connected in the same way as transformers
}

private void defineEdgesForBusesInsideSubstation(NodeBreakerValidation nodeBreakerValidation, List<Edge> edges) {
nodeBreakerValidation.getValidSubstations().forEach(psseSubstation -> {
List<Integer> busesInside = nodeBreakerValidation.getBuses(psseSubstation);
if (busesInside.size() >= 2) {
Expand All @@ -270,16 +288,6 @@ private ContainersMapping defineContainersMapping(PssePowerFlowModel psseModel,
}
}
});

return ContainersMapping.create(psseModel.getBuses(), edges,
PsseBus::getI,
Edge::bus1,
Edge::bus2,
Edge::zeroImpedance,
Edge::transformer,
busNumber -> getNominalVFromBusNumber(busNumToPsseBus, busNumber, perUnitContext),
AbstractConverter::getVoltageLevelId,
substationNums -> getSubstationId(nodeBreakerValidation, substationNums));
}

private static String getSubstationId(NodeBreakerValidation nodeBreakerValidation, Set<Integer> substationBusNumbers) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
*/
public class PsseFixes {

private static final String WINDING_1 = "Winding1";

private static final Logger LOGGER = LoggerFactory.getLogger(PsseFixes.class);
private final PssePowerFlowModel model;
private final PsseVersion version;
Expand Down Expand Up @@ -53,9 +55,9 @@ private void fixDuplicatedIds() {
private void fixTransformersWindingCod() {
model.getTransformers().forEach(psseTransformer -> {
if (psseTransformer.getK() == 0) { // TwoWindingsTransformers
fixTransformerWindingCod(psseTransformer, psseTransformer.getWinding1(), "Winding1");
fixTransformerWindingCod(psseTransformer, psseTransformer.getWinding1(), WINDING_1);
} else {
fixTransformerWindingCod(psseTransformer, psseTransformer.getWinding1(), "Winding1");
fixTransformerWindingCod(psseTransformer, psseTransformer.getWinding1(), WINDING_1);
fixTransformerWindingCod(psseTransformer, psseTransformer.getWinding2(), "Winding2");
fixTransformerWindingCod(psseTransformer, psseTransformer.getWinding3(), "Winding3");
}
Expand Down Expand Up @@ -185,9 +187,9 @@ private void fixGeneratorsControlledBus(Set<Integer> buses) {
private void fixTransformersControlledBus(Set<Integer> buses) {
model.getTransformers().forEach(psseTransformer -> {
if (psseTransformer.getK() == 0) { // TwoWindingsTransformers
fixTransformerWindingControlledBus(buses, psseTransformer, psseTransformer.getWinding1(), "Winding1");
fixTransformerWindingControlledBus(buses, psseTransformer, psseTransformer.getWinding1(), WINDING_1);
} else {
fixTransformerWindingControlledBus(buses, psseTransformer, psseTransformer.getWinding1(), "Winding1");
fixTransformerWindingControlledBus(buses, psseTransformer, psseTransformer.getWinding1(), WINDING_1);
fixTransformerWindingControlledBus(buses, psseTransformer, psseTransformer.getWinding2(), "Winding2");
fixTransformerWindingControlledBus(buses, psseTransformer, psseTransformer.getWinding3(), "Winding3");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,12 +196,7 @@ private void validateNonTransformerBranches(List<PsseNonTransformerBranch> nonTr
Map<String, List<String>> busesNonTransformerBranches = new HashMap<>();

for (PsseNonTransformerBranch nonTransformerBranch : nonTransformerBranches) {
if (!buses.containsKey(nonTransformerBranch.getI())) {
validationWarnings.add(String.format("NonTransformerBranch: bus not found I: %d, NonTransformerBranch record %d, %d, %s, ... will be ignored", nonTransformerBranch.getI(), nonTransformerBranch.getI(), nonTransformerBranch.getJ(), nonTransformerBranch.getCkt()));
continue;
}
if (!buses.containsKey(nonTransformerBranch.getJ())) {
validationWarnings.add(String.format("NonTransformerBranch: bus not found J: %d, NonTransformerBranch record %d, %d, %s, ... will be ignored", nonTransformerBranch.getJ(), nonTransformerBranch.getI(), nonTransformerBranch.getJ(), nonTransformerBranch.getCkt()));
if (isBaldyConnectedNonTransformedBranch(nonTransformerBranch, buses)) {
continue;
}
if (nonTransformerBranch.getX() == 0.0) {
Expand All @@ -214,6 +209,18 @@ private void validateNonTransformerBranches(List<PsseNonTransformerBranch> nonTr
checkDuplicatesLinks("NonTransformerBranch", "branches", getDuplicates(busesNonTransformerBranches));
}

private boolean isBaldyConnectedNonTransformedBranch(PsseNonTransformerBranch nonTransformerBranch, Map<Integer, List<Integer>> buses) {
if (!buses.containsKey(nonTransformerBranch.getI())) {
validationWarnings.add(String.format("NonTransformerBranch: bus not found I: %d, NonTransformerBranch record %d, %d, %s, ... will be ignored", nonTransformerBranch.getI(), nonTransformerBranch.getI(), nonTransformerBranch.getJ(), nonTransformerBranch.getCkt()));
return true;
}
if (!buses.containsKey(nonTransformerBranch.getJ())) {
validationWarnings.add(String.format("NonTransformerBranch: bus not found J: %d, NonTransformerBranch record %d, %d, %s, ... will be ignored", nonTransformerBranch.getJ(), nonTransformerBranch.getI(), nonTransformerBranch.getJ(), nonTransformerBranch.getCkt()));
return true;
}
return false;
}

private void validateTransformers(List<PsseTransformer> transformers, Map<Integer, List<Integer>> buses) {
List<PsseTransformer> twoWindingsTransformers = transformers.parallelStream()
.filter(transformer -> transformer.getK() == 0).toList();
Expand All @@ -228,12 +235,7 @@ private void validateTwoWindingsTransformers(List<PsseTransformer> transformers,
Map<String, List<String>> busesTransformers = new HashMap<>();

for (PsseTransformer transformer : transformers) {
if (!buses.containsKey(transformer.getI())) {
validationWarnings.add(String.format("Transformer: bus not found I: %d, Transformer record %d, %d, %s, ... will be ignored", transformer.getI(), transformer.getI(), transformer.getJ(), transformer.getCkt()));
continue;
}
if (!buses.containsKey(transformer.getJ())) {
validationWarnings.add(String.format("Transformer: bus not found J: %d, Transformer record %d, %d, %s, ... will be ignored", transformer.getJ(), transformer.getI(), transformer.getJ(), transformer.getCkt()));
if (isBaldyConnectedT2wTransformer(transformer, buses)) {
continue;
}

Expand All @@ -251,20 +253,23 @@ private void validateTwoWindingsTransformers(List<PsseTransformer> transformers,
checkDuplicatesLinks("Transformer", "branches", getDuplicates(busesTransformers));
}

private boolean isBaldyConnectedT2wTransformer(PsseTransformer transformer, Map<Integer, List<Integer>> buses) {
if (!buses.containsKey(transformer.getI())) {
validationWarnings.add(String.format("Transformer: bus not found I: %d, Transformer record %d, %d, %s, ... will be ignored", transformer.getI(), transformer.getI(), transformer.getJ(), transformer.getCkt()));
return true;
}
if (!buses.containsKey(transformer.getJ())) {
validationWarnings.add(String.format("Transformer: bus not found J: %d, Transformer record %d, %d, %s, ... will be ignored", transformer.getJ(), transformer.getI(), transformer.getJ(), transformer.getCkt()));
return true;
}
return false;
}

private void validateThreeWindingsTransformers(List<PsseTransformer> transformers, Map<Integer, List<Integer>> buses) {
Map<String, List<String>> busesTransformers = new HashMap<>();

for (PsseTransformer transformer : transformers) {
if (!buses.containsKey(transformer.getI())) {
validationWarnings.add(String.format("Transformer: bus not found I: %d, Transformer record %d, %d, %d, %s, ... will be ignored", transformer.getI(), transformer.getI(), transformer.getJ(), transformer.getK(), transformer.getCkt()));
continue;
}
if (!buses.containsKey(transformer.getJ())) {
validationWarnings.add(String.format("Transformer: bus not found J: %d, Transformer record %d, %d, %d, %s, ... will be ignored", transformer.getJ(), transformer.getI(), transformer.getJ(), transformer.getK(), transformer.getCkt()));
continue;
}
if (!buses.containsKey(transformer.getK())) {
validationWarnings.add(String.format("Transformer: bus not found K: %d, Transformer record %d, %d, %d, %s, ... will be ignored", transformer.getK(), transformer.getI(), transformer.getJ(), transformer.getK(), transformer.getCkt()));
if (isBaldyConnectedT3wTransformer(transformer, buses)) {
continue;
}

Expand Down Expand Up @@ -306,6 +311,22 @@ private void validateThreeWindingsTransformers(List<PsseTransformer> transformer
}
}

private boolean isBaldyConnectedT3wTransformer(PsseTransformer transformer, Map<Integer, List<Integer>> buses) {
if (!buses.containsKey(transformer.getI())) {
validationWarnings.add(String.format("Transformer: bus not found I: %d, Transformer record %d, %d, %d, %s, ... will be ignored", transformer.getI(), transformer.getI(), transformer.getJ(), transformer.getK(), transformer.getCkt()));
return true;
}
if (!buses.containsKey(transformer.getJ())) {
validationWarnings.add(String.format("Transformer: bus not found J: %d, Transformer record %d, %d, %d, %s, ... will be ignored", transformer.getJ(), transformer.getI(), transformer.getJ(), transformer.getK(), transformer.getCkt()));
return true;
}
if (!buses.containsKey(transformer.getK())) {
validationWarnings.add(String.format("Transformer: bus not found K: %d, Transformer record %d, %d, %d, %s, ... will be ignored", transformer.getK(), transformer.getI(), transformer.getJ(), transformer.getK(), transformer.getCkt()));
return true;
}
return false;
}

private void validateTransformerX(String id, double x, String xTag) {
if (x == 0.0) {
validationErrors.add(getErrorTransformer1Parameter(id, xTag, x));
Expand Down Expand Up @@ -359,12 +380,7 @@ private void validateTransformerWindingCont(Map<Integer, List<Integer>> buses, S
private void validateTwoTerminalDcTransmissionLines(List<PsseTwoTerminalDcTransmissionLine> twoTerminalDcTransmissionLines, Map<Integer, List<Integer>> buses) {
Map<String, Integer> twoTerminalDcNames = new HashMap<>();
for (PsseTwoTerminalDcTransmissionLine twoTerminalDc : twoTerminalDcTransmissionLines) {
if (!buses.containsKey(twoTerminalDc.getRectifier().getIp())) {
validationWarnings.add(String.format("TwoTerminalDcTransmissionLine: %s rectifier bus not found Ip: %d, TwoTerminalDcTransmissionLine record %s, ... will be ignored", twoTerminalDc.getName(), twoTerminalDc.getRectifier().getIp(), twoTerminalDc.getName()));
continue;
}
if (!buses.containsKey(twoTerminalDc.getInverter().getIp())) {
validationWarnings.add(String.format("TwoTerminalDcTransmissionLine: %s inverter bus not found Ip: %d, TwoTerminalDcTransmissionLine record %s, ... will be ignored", twoTerminalDc.getName(), twoTerminalDc.getInverter().getIp(), twoTerminalDc.getName()));
if (isBaldyConnectedTwoTerminalDcTransmissionLine(twoTerminalDc, buses)) {
continue;
}
twoTerminalDcNames.put(twoTerminalDc.getName(), twoTerminalDcNames.getOrDefault(twoTerminalDc.getName(), 0) + 1);
Expand All @@ -376,6 +392,18 @@ private void validateTwoTerminalDcTransmissionLines(List<PsseTwoTerminalDcTransm
}
}

private boolean isBaldyConnectedTwoTerminalDcTransmissionLine(PsseTwoTerminalDcTransmissionLine twoTerminalDc, Map<Integer, List<Integer>> buses) {
if (!buses.containsKey(twoTerminalDc.getRectifier().getIp())) {
validationWarnings.add(String.format("TwoTerminalDcTransmissionLine: %s rectifier bus not found Ip: %d, TwoTerminalDcTransmissionLine record %s, ... will be ignored", twoTerminalDc.getName(), twoTerminalDc.getRectifier().getIp(), twoTerminalDc.getName()));
return true;
}
if (!buses.containsKey(twoTerminalDc.getInverter().getIp())) {
validationWarnings.add(String.format("TwoTerminalDcTransmissionLine: %s inverter bus not found Ip: %d, TwoTerminalDcTransmissionLine record %s, ... will be ignored", twoTerminalDc.getName(), twoTerminalDc.getInverter().getIp(), twoTerminalDc.getName()));
return true;
}
return false;
}

private void validateSwitchedShunts(List<PsseSwitchedShunt> switchedShunts, Map<Integer, List<Integer>> buses, PsseVersion psseVersion) {
Map<String, List<String>> busesSwitchedShunts = new HashMap<>();

Expand Down

0 comments on commit 0780f71

Please sign in to comment.