Skip to content

Commit

Permalink
Add support for two windings transformer tabular modifications. (#396)
Browse files Browse the repository at this point in the history
Signed-off-by: Florent MILLOT <[email protected]>
  • Loading branch information
flomillot authored Dec 22, 2023
1 parent d241561 commit 2882a7a
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@
import com.powsybl.commons.reporter.Reporter;
import com.powsybl.commons.reporter.ReporterModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName;
import org.gridsuite.modification.server.entities.equipment.modification.TwoWindingsTransformerModificationEntity;
Expand Down Expand Up @@ -49,10 +46,12 @@ public class TwoWindingsTransformerModificationInfos extends BranchModificationI
private AttributeModification<Double> ratedS;

@Schema(description = "Ratio tap changer")
private RatioTapChangerModificationInfos ratioTapChanger;
@Builder.Default
private RatioTapChangerModificationInfos ratioTapChanger = new RatioTapChangerModificationInfos();

@Schema(description = "Phase tap changer")
private PhaseTapChangerModificationInfos phaseTapChanger;
@Builder.Default
private PhaseTapChangerModificationInfos phaseTapChanger = new PhaseTapChangerModificationInfos();

@Override
public TwoWindingsTransformerModificationEntity toEntity() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.gridsuite.modification.server.entities.equipment.modification.BatteryModificationEntity;
import org.gridsuite.modification.server.entities.equipment.modification.GeneratorModificationEntity;
import org.gridsuite.modification.server.entities.equipment.modification.LoadModificationEntity;
import org.gridsuite.modification.server.entities.equipment.modification.TwoWindingsTransformerModificationEntity;
import org.gridsuite.modification.server.entities.equipment.modification.VoltageLevelModificationEntity;

/**
Expand Down Expand Up @@ -48,6 +49,9 @@ public TabularModificationEntity(TabularModificationInfos tabularModificationInf
case "LOAD_MODIFICATION":
modifications = tabularModificationInfos.getModifications().stream().map(loadModificationInfos -> new LoadModificationEntity((LoadModificationInfos) loadModificationInfos)).collect(Collectors.toList());
break;
case "TWO_WINDINGS_TRANSFORMER_MODIFICATION":
modifications = tabularModificationInfos.getModifications().stream().map(twtModificationInfos -> new TwoWindingsTransformerModificationEntity((TwoWindingsTransformerModificationInfos) twtModificationInfos)).collect(Collectors.toList());
break;
case "BATTERY_MODIFICATION":
modifications = tabularModificationInfos.getModifications().stream().map(batteryModificationInfos -> new BatteryModificationEntity((BatteryModificationInfos) batteryModificationInfos)).collect(Collectors.toList());
break;
Expand Down Expand Up @@ -87,6 +91,9 @@ public void update(@NonNull ModificationInfos modificationInfos) {
case "LOAD_MODIFICATION":
modifications.addAll(tabularModificationInfos.getModifications().stream().map(loadModificationInfos -> new LoadModificationEntity((LoadModificationInfos) loadModificationInfos)).collect(Collectors.toList()));
break;
case "TWO_WINDINGS_TRANSFORMER_MODIFICATION":
modifications.addAll(tabularModificationInfos.getModifications().stream().map(twtModificationInfos -> new TwoWindingsTransformerModificationEntity((TwoWindingsTransformerModificationInfos) twtModificationInfos)).collect(Collectors.toList()));
break;
case "VOLTAGE_LEVEL_MODIFICATION":
modifications.addAll(tabularModificationInfos.getModifications().stream().map(voltageLevelModificationInfos -> new VoltageLevelModificationEntity((VoltageLevelModificationInfos) voltageLevelModificationInfos)).collect(Collectors.toList()));
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ public void apply(Network network, Reporter subReporter) {
case "LOAD_MODIFICATION":
defaultMessage = "loads" + defaultMessage;
break;
case "TWO_WINDINGS_TRANSFORMER_MODIFICATION":
defaultMessage = "two windings transformers" + defaultMessage;
break;
case "BATTERY_MODIFICATION":
defaultMessage = "batteries" + defaultMessage;
break;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/**
* 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.modifications.tabularmodifications;

import com.fasterxml.jackson.core.type.TypeReference;
import com.powsybl.iidm.network.Network;
import lombok.SneakyThrows;
import org.gridsuite.modification.server.ModificationType;
import org.gridsuite.modification.server.dto.*;
import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest;
import org.gridsuite.modification.server.utils.NetworkCreation;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Tag;

import java.util.List;
import java.util.Map;
import java.util.UUID;

import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage;
import static org.junit.Assert.assertEquals;

/**
* @author Florent MILLOT <florent.millot at rte-france.com>
*/
@Tag("IntegrationTest")
public class TabularTwoWindingsTransformerModificationsTest extends AbstractNetworkModificationTest {
@Override
protected Network createNetwork(UUID networkUuid) {
return NetworkCreation.create(networkUuid, true);
}

@Override
protected ModificationInfos buildModification() {
List<ModificationInfos> modifications = List.of(
buildOneModification("trf1", 0.0),
buildOneModification("trf2", 1.0),
buildOneModification("unknownTwt", 1.0)
);
return TabularModificationInfos.builder()
.modificationType("TWO_WINDINGS_TRANSFORMER_MODIFICATION")
.modifications(modifications)
.stashed(false)
.build();
}

@Override
protected ModificationInfos buildModificationUpdate() {
List<ModificationInfos> modifications = List.of(
buildOneModification("trf1", 3.0),
buildOneModification("trf2", 4.0)
);
return TabularModificationInfos.builder()
.modificationType("TWO_WINDINGS_TRANSFORMER_MODIFICATION")
.modifications(modifications)
.stashed(false)
.build();
}

protected TwoWindingsTransformerModificationInfos buildOneModification(String equipmentId, Double seriesResistance) {
return TwoWindingsTransformerModificationInfos.builder().equipmentId(equipmentId)
.seriesResistance(new AttributeModification<>(seriesResistance, OperationType.SET))
.build();
}

@Override
protected void assertAfterNetworkModificationCreation() {
assertEquals(0.0, getNetwork().getTwoWindingsTransformer("trf1").getR(), 0.001);
assertEquals(1.0, getNetwork().getTwoWindingsTransformer("trf2").getR(), 0.001);
assertLogMessage("TWO_WINDINGS_TRANSFORMER_NOT_FOUND : Two windings transformer with ID 'unknownTwt' does not exist in the network", ModificationType.TWO_WINDINGS_TRANSFORMER_MODIFICATION.name() + "1", reportService);
}

@Override
protected void assertAfterNetworkModificationDeletion() {
assertEquals(2.0, getNetwork().getTwoWindingsTransformer("trf1").getR(), 0.001);
assertEquals(2.0, getNetwork().getTwoWindingsTransformer("trf2").getR(), 0.001);
}

@Override
@SneakyThrows
protected void testCreationModificationMessage(ModificationInfos modificationInfos) {
assertEquals("TABULAR_MODIFICATION", modificationInfos.getMessageType());
Map<String, String> createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { });
Assertions.assertEquals("TWO_WINDINGS_TRANSFORMER_MODIFICATION", createdValues.get("tabularModificationType"));
}

@Override
@SneakyThrows
protected void testUpdateModificationMessage(ModificationInfos modificationInfos) {
assertEquals("TABULAR_MODIFICATION", modificationInfos.getMessageType());
Map<String, String> updatedValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { });
Assertions.assertEquals("TWO_WINDINGS_TRANSFORMER_MODIFICATION", updatedValues.get("tabularModificationType"));
}
}

0 comments on commit 2882a7a

Please sign in to comment.