Skip to content

Commit

Permalink
Merge branch 'main' into add_control_for_battery_and_generator
Browse files Browse the repository at this point in the history
  • Loading branch information
souissimai authored Nov 29, 2023
2 parents b6233c9 + 0777d9c commit 8ed8a9a
Show file tree
Hide file tree
Showing 31 changed files with 638 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@ public ResponseEntity<List<ModificationInfos>> getNetworkModifications(@Paramete
return ResponseEntity.ok().body(networkModificationService.getNetworkModifications(groupUuid, onlyMetadata, errorOnGroupNotFound, onlyStashed));
}

@GetMapping(value = "/groups/{groupUuid}/network-modifications-count", produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Get a groups's modification count")
@ApiResponse(responseCode = "200", description = "Count of group's modifications")
public ResponseEntity<Integer> getNetworkModificationsCount(@Parameter(description = "Group UUID") @PathVariable("groupUuid") UUID groupUuid,
@Parameter(description = "Stashed modifications") @RequestParam(name = "stashed", required = false, defaultValue = "false") Boolean stashed) {
return ResponseEntity.ok().body(networkModificationService.getNetworkModificationsCount(groupUuid, stashed));
}

@PostMapping(value = "/groups")
@Operation(summary = "Create a modification group based on another group")
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The group and its modifications have been duplicated")})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,10 @@ public class BranchCreationInfos extends EquipmentCreationInfos {

@Schema(description = "Connection position 2")
private Integer connectionPosition2;

@Schema(description = "Connected 1")
private boolean connected1;

@Schema(description = "Connected 2")
private boolean connected2;
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,6 @@ public AbstractModification toModification() {

@Override
public Reporter createSubReporter(ReporterModel reporter) {
return reporter.createSubReporter(getType().name(), "Creation of line " + getEquipmentId());
return reporter.createSubReporter(getType().name(), "Creation of line ${lineId}", "lineId", getEquipmentId());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import lombok.*;
import lombok.experimental.SuperBuilder;
import org.springframework.data.annotation.AccessType;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
Expand All @@ -27,7 +28,16 @@
@EqualsAndHashCode
public class BasicEquipmentInfos {
@Id
private String uniqueId;
@AccessType(AccessType.Type.PROPERTY)
@SuppressWarnings("unused")
public String getUniqueId() {
return networkUuid + "_" + variantId + "_" + id;
}

@SuppressWarnings("unused")
public void setUniqueId(String uniqueId) {
// No setter because it a composite value
}

@MultiField(
mainField = @Field(name = "equipmentId", type = FieldType.Text),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
import com.powsybl.iidm.network.Generator;
import com.powsybl.iidm.network.Identifiable;
import com.powsybl.iidm.network.IdentifiableType;
import com.powsybl.iidm.network.Load;
import com.powsybl.iidm.network.ShuntCompensator;
import com.powsybl.iidm.network.VoltageLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -20,7 +22,10 @@
import org.gridsuite.modification.server.NetworkModificationException;
import org.gridsuite.modification.server.dto.formula.equipmentfield.BatteryField;
import org.gridsuite.modification.server.dto.formula.equipmentfield.GeneratorField;
import org.gridsuite.modification.server.dto.formula.equipmentfield.LoadField;
import org.gridsuite.modification.server.dto.formula.equipmentfield.ShuntCompensatorField;
import org.gridsuite.modification.server.dto.formula.equipmentfield.VoltageLevelField;


/**
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
Expand Down Expand Up @@ -51,6 +56,8 @@ public Double getRefOrValue(Identifiable<?> identifiable) {
case GENERATOR -> GeneratorField.getReferenceValue((Generator) identifiable, equipmentField);
case BATTERY -> BatteryField.getReferenceValue((Battery) identifiable, equipmentField);
case SHUNT_COMPENSATOR -> ShuntCompensatorField.getReferenceValue((ShuntCompensator) identifiable, equipmentField);
case VOLTAGE_LEVEL -> VoltageLevelField.getReferenceValue((VoltageLevel) identifiable, equipmentField);
case LOAD -> LoadField.getReferenceValue((Load) identifiable, equipmentField);
default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR,
String.format("Unsupported equipment type : %s", identifiableType.name()));
};
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* 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/.
*/

package org.gridsuite.modification.server.dto.formula.equipmentfield;

import com.powsybl.iidm.network.Load;

/**
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
*/

public enum LoadField {
ACTIVE_POWER,
REACTIVE_POWER;

public static Double getReferenceValue(Load load, String loadField) {
LoadField field = LoadField.valueOf(loadField);
return switch (field) {
case ACTIVE_POWER -> load.getP0();
case REACTIVE_POWER -> load.getQ0();
};
}

public static void setNewValue(Load load, String loadField, Double newValue) {
LoadField field = LoadField.valueOf(loadField);
switch (field) {
case ACTIVE_POWER -> load.setP0(newValue);
case REACTIVE_POWER -> load.setQ0(newValue);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/**
* 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/.
*/

package org.gridsuite.modification.server.dto.formula.equipmentfield;

import com.powsybl.iidm.network.VoltageLevel;
import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit;
import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder;

/**
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
*/

public enum VoltageLevelField {
NOMINAL_VOLTAGE,
LOW_VOLTAGE_LIMIT,
HIGH_VOLTAGE_LIMIT,
LOW_SHORT_CIRCUIT_CURRENT_LIMIT,
HIGH_SHORT_CIRCUIT_CURRENT_LIMIT;

public static Double getReferenceValue(VoltageLevel voltageLevel, String voltageLevelField) {
IdentifiableShortCircuit<VoltageLevel> identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class);
VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField);
return switch (field) {
case NOMINAL_VOLTAGE -> voltageLevel.getNominalV();
case LOW_VOLTAGE_LIMIT -> voltageLevel.getLowVoltageLimit();
case HIGH_VOLTAGE_LIMIT -> voltageLevel.getHighVoltageLimit();
case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> identifiableShortCircuit == null ? null : identifiableShortCircuit.getIpMin();
case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> identifiableShortCircuit == null ? null : identifiableShortCircuit.getIpMax();
};
}

public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, Double newValue) {
IdentifiableShortCircuit<VoltageLevel> identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class);
VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField);
switch (field) {
case NOMINAL_VOLTAGE -> voltageLevel.setNominalV(newValue);
case LOW_VOLTAGE_LIMIT -> voltageLevel.setLowVoltageLimit(newValue);
case HIGH_VOLTAGE_LIMIT -> voltageLevel.setHighVoltageLimit(newValue);
case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> {
IdentifiableShortCircuitAdder<VoltageLevel> adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMin(newValue);
if (identifiableShortCircuit != null) {
adder.withIpMax(identifiableShortCircuit.getIpMax());
}
adder.add();
}
case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> {
IdentifiableShortCircuitAdder<VoltageLevel> adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMax(newValue);
if (identifiableShortCircuit != null) {
adder.withIpMin(identifiableShortCircuit.getIpMin());
}
adder.add();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ public void cloneVariantModifications(@NonNull UUID networkUuid, @NonNull String
addAllEquipmentInfos(
equipmentInfosRepository.findAllByNetworkUuidAndVariantId(networkUuid, variantToCloneId).stream()
.map(equipmentInfos -> {
equipmentInfos.setUniqueId(null);
equipmentInfos.setVariantId(variantId);
return equipmentInfos;
})
Expand All @@ -74,7 +73,6 @@ public void cloneVariantModifications(@NonNull UUID networkUuid, @NonNull String
addAllTombstonedEquipmentInfos(
tombstonedEquipmentInfosRepository.findAllByNetworkUuidAndVariantId(networkUuid, variantToCloneId).stream()
.map(tombstonedEquipmentInfos -> {
tombstonedEquipmentInfos.setUniqueId(null);
tombstonedEquipmentInfos.setVariantId(variantId);
return tombstonedEquipmentInfos;
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ public class BranchCreationEntity extends EquipmentCreationEntity {
@Column(name = "connectionPosition2")
private Integer connectionPosition2;

@Column(name = "connected1", columnDefinition = "boolean default true")
private boolean connected1;

@Column(name = "connected2", columnDefinition = "boolean default true")
private boolean connected2;

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
@JoinColumn(name = "current_limits_id1",
referencedColumnName = "id",
Expand Down Expand Up @@ -109,5 +115,7 @@ private void assignAttributes(BranchCreationInfos branchCreationInfos) {
connectionName2 = branchCreationInfos.getConnectionName2();
connectionPosition1 = branchCreationInfos.getConnectionPosition1();
connectionPosition2 = branchCreationInfos.getConnectionPosition2();
connected1 = branchCreationInfos.isConnected1();
connected2 = branchCreationInfos.isConnected2();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,22 +67,26 @@ public LineCreationInfos toModificationInfos() {
.stashed(getStashed())
.equipmentId(getEquipmentId())
.equipmentName(getEquipmentName())
// branch
.seriesResistance(getSeriesResistance())
.seriesReactance(getSeriesReactance())
.shuntConductance1(getShuntConductance1())
.shuntSusceptance1(getShuntSusceptance1())
.shuntConductance2(getShuntConductance2())
.shuntSusceptance2(getShuntSusceptance2())
.voltageLevelId1(getVoltageLevelId1())
.busOrBusbarSectionId1(getBusOrBusbarSectionId1())
.voltageLevelId2(getVoltageLevelId2())
.busOrBusbarSectionId1(getBusOrBusbarSectionId1())
.busOrBusbarSectionId2(getBusOrBusbarSectionId2())
.connectionName1(getConnectionName1())
.connectionDirection1(getConnectionDirection1())
.connectionName2(getConnectionName2())
.connectionDirection1(getConnectionDirection1())
.connectionDirection2(getConnectionDirection2())
.connectionPosition1(getConnectionPosition1())
.connectionPosition2(getConnectionPosition2());
.connectionPosition2(getConnectionPosition2())
.connected1(isConnected1())
.connected2(isConnected2())
// line
.shuntConductance1(getShuntConductance1())
.shuntSusceptance1(getShuntSusceptance1())
.shuntConductance2(getShuntConductance2())
.shuntSusceptance2(getShuntSusceptance2());

if (getCurrentLimits1() != null) {
builder.currentLimits1(getCurrentLimits1().toCurrentLimitsInfos());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,23 +180,27 @@ public TwoWindingsTransformerCreationInfos toModificationInfos() {
.stashed(getStashed())
.equipmentId(getEquipmentId())
.equipmentName(getEquipmentName())
// branch
.seriesResistance(getSeriesResistance())
.seriesReactance(getSeriesReactance())
.magnetizingConductance(getMagnetizingConductance())
.magnetizingSusceptance(getMagnetizingSusceptance())
.ratedVoltage1(getRatedVoltage1())
.ratedVoltage2(getRatedVoltage2())
.ratedS(getRatedS())
.voltageLevelId1(getVoltageLevelId1())
.busOrBusbarSectionId1(getBusOrBusbarSectionId1())
.voltageLevelId2(getVoltageLevelId2())
.busOrBusbarSectionId1(getBusOrBusbarSectionId1())
.busOrBusbarSectionId2(getBusOrBusbarSectionId2())
.connectionName1(getConnectionName1())
.connectionDirection1(getConnectionDirection1())
.connectionName2(getConnectionName2())
.connectionDirection1(getConnectionDirection1())
.connectionDirection2(getConnectionDirection2())
.connectionPosition1(getConnectionPosition1())
.connectionPosition2(getConnectionPosition2());
.connectionPosition2(getConnectionPosition2())
.connected1(isConnected1())
.connected2(isConnected2())
// 2WT
.magnetizingConductance(getMagnetizingConductance())
.magnetizingSusceptance(getMagnetizingSusceptance())
.ratedVoltage1(getRatedVoltage1())
.ratedVoltage2(getRatedVoltage2())
.ratedS(getRatedS());

if (getCurrentLimits1() != null) {
builder.currentLimits1(getCurrentLimits1().toCurrentLimitsInfos());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
import com.powsybl.iidm.network.Battery;
import com.powsybl.iidm.network.Generator;
import com.powsybl.iidm.network.Identifiable;
import com.powsybl.iidm.network.Load;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.ShuntCompensator;
import com.powsybl.iidm.network.VoltageLevel;
import org.gridsuite.modification.server.NetworkModificationException;
import org.gridsuite.modification.server.dto.ByFormulaModificationInfos;
import org.gridsuite.modification.server.dto.FilterEquipments;
Expand All @@ -23,7 +25,9 @@
import org.gridsuite.modification.server.dto.formula.Operator;
import org.gridsuite.modification.server.dto.formula.equipmentfield.BatteryField;
import org.gridsuite.modification.server.dto.formula.equipmentfield.GeneratorField;
import org.gridsuite.modification.server.dto.formula.equipmentfield.LoadField;
import org.gridsuite.modification.server.dto.formula.equipmentfield.ShuntCompensatorField;
import org.gridsuite.modification.server.dto.formula.equipmentfield.VoltageLevelField;
import org.gridsuite.modification.server.service.FilterService;
import org.jetbrains.annotations.Nullable;
import org.springframework.util.CollectionUtils;
Expand Down Expand Up @@ -155,6 +159,8 @@ private void applyFormula(Network network,
case GENERATOR -> GeneratorField.setNewValue((Generator) identifiable, formulaInfos.getEditedField(), newValue);
case BATTERY -> BatteryField.setNewValue((Battery) identifiable, formulaInfos.getEditedField(), newValue);
case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) identifiable, formulaInfos.getEditedField(), newValue);
case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, formulaInfos.getEditedField(), newValue);
case LOAD -> LoadField.setNewValue((Load) identifiable, formulaInfos.getEditedField(), newValue);
default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Unsupported equipment");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ public void apply(Network network, Reporter subReporter) {
ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos1, line.newCurrentLimits1());
ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos2, line.newCurrentLimits2());
}

ModificationUtils.getInstance().disconnectBranch(modificationInfos, network.getLine(modificationInfos.getEquipmentId()), subReporter);
}

private void addLine(Network network, VoltageLevel voltageLevel1, VoltageLevel voltageLevel2, LineCreationInfos lineCreationInfos, boolean withSwitch1, boolean withSwitch2, Reporter subReporter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,28 @@ public void disconnectInjection(InjectionCreationInfos modificationInfos, Inject
}
}

public void disconnectBranch(BranchCreationInfos modificationInfos, Branch<?> branch, Reporter subReporter) {
// A newly created branch is connected by default on both sides, unless we choose not to do
if (!modificationInfos.isConnected1()) {
branch.getTerminal1().disconnect();
subReporter.report(Report.builder()
.withKey("terminal1Disconnected")
.withDefaultMessage("Equipment with id=${id} disconnected on side 1")
.withValue("id", modificationInfos.getEquipmentId())
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
}
if (!modificationInfos.isConnected2()) {
branch.getTerminal2().disconnect();
subReporter.report(Report.builder()
.withKey("terminal2Disconnected")
.withDefaultMessage("Equipment with id=${id} disconnected on side 2")
.withValue("id", modificationInfos.getEquipmentId())
.withSeverity(TypedValue.INFO_SEVERITY)
.build());
}
}

public Identifiable<?> getEquipmentByIdentifiableType(Network network, String type, String equipmentId) {
if (type == null || equipmentId == null) {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public void apply(Network network, Reporter subReporter) {
ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos2, twoWindingsTransformer.newCurrentLimits2());
}

ModificationUtils.getInstance().disconnectBranch(modificationInfos, network.getTwoWindingsTransformer(modificationInfos.getEquipmentId()), subReporter);
}

private TwoWindingsTransformer create2WTInNodeBreaker(Network network, VoltageLevel voltageLevel1, VoltageLevel voltageLevel2, Reporter subReporter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,6 @@ public interface ModificationRepository extends JpaRepository<ModificationEntity

@EntityGraph(attributePaths = {"reactiveCapabilityCurvePoints"}, type = EntityGraph.EntityGraphType.LOAD)
Set<GeneratorModificationEntity> findAllReactiveCapabilityCurvePointsByIdIn(List<UUID> ids);

Integer countByGroupIdAndStashed(UUID groupId, boolean stashed);
}
Loading

0 comments on commit 8ed8a9a

Please sign in to comment.