Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into junit/migrate5
Browse files Browse the repository at this point in the history
  • Loading branch information
Tristan-WorkGH committed Oct 23, 2024
2 parents b8a7d29 + 6a9d23c commit 16ea505
Show file tree
Hide file tree
Showing 9 changed files with 389 additions and 154 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
<mockwebserver3.version>5.0.0-alpha.14</mockwebserver3.version>
<liquibase-hibernate-package>org.gridsuite.modification.server</liquibase-hibernate-package>
<!-- FIXME: powsybl-network-store modules'version is overloaded in the dependencies section.The overloads and this property below have to be removed at next powsybl-ws-dependencies.version upgrade -->
<powsybl-network-store.version>1.18.2</powsybl-network-store.version>
<powsybl-network-store.version>1.19.0</powsybl-network-store.version>
</properties>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* Copyright (c) 2024, 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;

import com.powsybl.iidm.network.IdentifiableType;
import com.powsybl.iidm.network.Switch;
import com.powsybl.iidm.network.Terminal;
import com.powsybl.math.graph.TraverseResult;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
// FIXME : to remove when this class is available in network-store
public class BusbarSectionFinderTraverser implements Terminal.TopologyTraverser {

private final boolean onlyConnectedBbs;

private String firstTraversedBbsId;

public BusbarSectionFinderTraverser(boolean onlyConnectedBbs) {
this.onlyConnectedBbs = onlyConnectedBbs;
}

@Override
public TraverseResult traverse(Terminal terminal, boolean connected) {
if (terminal.getConnectable().getType() == IdentifiableType.BUSBAR_SECTION) {
firstTraversedBbsId = terminal.getConnectable().getId();
return TraverseResult.TERMINATE_TRAVERSER;
}
return TraverseResult.CONTINUE;
}

@Override
public TraverseResult traverse(Switch aSwitch) {
if (onlyConnectedBbs && aSwitch.isOpen()) {
return TraverseResult.TERMINATE_PATH;
}
return TraverseResult.CONTINUE;
}

public String getFirstTraversedBbsId() {
return firstTraversedBbsId;
}
}

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import com.powsybl.iidm.network.extensions.StandbyAutomatonAdder;
import org.gridsuite.modification.server.NetworkModificationException;
import org.gridsuite.modification.server.dto.StaticVarCompensatorCreationInfos;
import org.gridsuite.modification.server.dto.VoltageRegulationType;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -60,16 +59,6 @@ public void check(Network network) throws NetworkModificationException {
public void apply(Network network, ReportNode subReportNode) {
// create the static var compensator in the network
VoltageLevel voltageLevel = ModificationUtils.getInstance().getVoltageLevel(network, modificationInfos.getVoltageLevelId());
if (Objects.isNull(modificationInfos.getMaxSusceptance()) && Objects.nonNull(modificationInfos.getMaxQAtNominalV())) {
modificationInfos.setMaxSusceptance((modificationInfos.getMaxQAtNominalV()) / Math.pow(voltageLevel.getNominalV(), 2));
}
if (Objects.isNull(modificationInfos.getMinSusceptance()) && Objects.nonNull(modificationInfos.getMinQAtNominalV())) {
modificationInfos.setMinSusceptance((modificationInfos.getMinQAtNominalV()) / Math.pow(voltageLevel.getNominalV(), 2));
}
if (Boolean.TRUE.equals(modificationInfos.isStandbyAutomatonOn()) && Objects.isNull(modificationInfos.getB0())
&& Objects.nonNull(modificationInfos.getQ0())) {
modificationInfos.setB0((modificationInfos.getQ0()) / Math.pow(voltageLevel.getNominalV(), 2));
}
if (voltageLevel.getTopologyKind() == TopologyKind.NODE_BREAKER) {
createStaticVarCompensatorInNodeBreaker(voltageLevel, modificationInfos, network, subReportNode);
} else {
Expand Down Expand Up @@ -99,12 +88,15 @@ private StaticVarCompensatorAdder createStaticVarCompensatorAdderInNodeBreaker(V
staticVarCompensatorCreationInfos.getRegulatingTerminalId(),
staticVarCompensatorCreationInfos.getRegulatingTerminalType(),
staticVarCompensatorCreationInfos.getRegulatingTerminalVlId());

double bMax = Objects.isNull(staticVarCompensatorCreationInfos.getMaxSusceptance()) && Objects.nonNull(staticVarCompensatorCreationInfos.getMaxQAtNominalV()) ?
(staticVarCompensatorCreationInfos.getMaxQAtNominalV()) / Math.pow(voltageLevel.getNominalV(), 2) : staticVarCompensatorCreationInfos.getMaxSusceptance();
double bMin = Objects.isNull(staticVarCompensatorCreationInfos.getMinSusceptance()) && Objects.nonNull(staticVarCompensatorCreationInfos.getMinQAtNominalV()) ?
(staticVarCompensatorCreationInfos.getMinQAtNominalV()) / Math.pow(voltageLevel.getNominalV(), 2) : staticVarCompensatorCreationInfos.getMinSusceptance();
StaticVarCompensatorAdder staticVarCompensatorAdder = voltageLevel.newStaticVarCompensator()
.setId(staticVarCompensatorCreationInfos.getEquipmentId())
.setName(staticVarCompensatorCreationInfos.getEquipmentName())
.setBmax(nanIfNull(staticVarCompensatorCreationInfos.getMaxSusceptance()))
.setBmin(nanIfNull(staticVarCompensatorCreationInfos.getMinSusceptance()))
.setBmax(bMax)
.setBmin(bMin)
.setVoltageSetpoint(nanIfNull(staticVarCompensatorCreationInfos.getVoltageSetpoint()))
.setReactivePowerSetpoint(nanIfNull(staticVarCompensatorCreationInfos.getReactivePowerSetpoint()))
.setRegulationMode(staticVarCompensatorCreationInfos.getRegulationMode());
Expand All @@ -125,18 +117,20 @@ private void addExtensionsToStaticVarCompensator(StaticVarCompensatorCreationInf
}

reportInjectionCreationConnectivity(staticVarCompensatorCreationInfos, subReportNode);
createStaticVarCompensatorVoltageRegulation(staticVarCompensatorCreationInfos, staticVarCompensator, voltageLevel, subReportNode);
reportStaticVarCompensatorStandbyAutomaton(staticVarCompensatorCreationInfos, staticVarCompensator, subReportNode);
reportStaticVarCompensatorLimitsAndSetpoints(staticVarCompensatorCreationInfos, staticVarCompensator, voltageLevel, subReportNode);
reportStaticVarCompensatorStandbyAutomaton(staticVarCompensatorCreationInfos, staticVarCompensator, voltageLevel, subReportNode);
}

private void reportStaticVarCompensatorStandbyAutomaton(StaticVarCompensatorCreationInfos staticVarCompensatorCreationInfos,
StaticVarCompensator staticVarCompensator, ReportNode subReportNode) {
StaticVarCompensator staticVarCompensator, VoltageLevel voltageLevel, ReportNode subReportNode) {
if (Boolean.TRUE.equals(staticVarCompensatorCreationInfos.isStandbyAutomatonOn())) {
List<ReportNode> standbyAutomatonReports = new ArrayList<>();
double b0 = Objects.isNull(staticVarCompensatorCreationInfos.getB0()) && Objects.nonNull(staticVarCompensatorCreationInfos.getQ0()) ?
(staticVarCompensatorCreationInfos.getQ0()) / Math.pow(voltageLevel.getNominalV(), 2) : staticVarCompensatorCreationInfos.getB0();
try {
staticVarCompensator.newExtension(StandbyAutomatonAdder.class)
.withStandbyStatus(staticVarCompensatorCreationInfos.isStandby())
.withB0(staticVarCompensatorCreationInfos.getB0())
.withB0(b0)
.withLowVoltageSetpoint(staticVarCompensatorCreationInfos.getLowVoltageSetpoint())
.withHighVoltageSetpoint(staticVarCompensatorCreationInfos.getHighVoltageSetpoint())
.withLowVoltageThreshold(staticVarCompensatorCreationInfos.getLowVoltageThreshold())
Expand All @@ -145,9 +139,16 @@ private void reportStaticVarCompensatorStandbyAutomaton(StaticVarCompensatorCrea
standbyAutomatonReports.add(ModificationUtils.getInstance().buildCreationReport(
staticVarCompensatorCreationInfos.isStandby(),
"Standby"));
standbyAutomatonReports.add(ModificationUtils.getInstance().buildCreationReport(
staticVarCompensatorCreationInfos.getB0(),
"Fixed part of susceptance"));
if (Objects.nonNull(staticVarCompensatorCreationInfos.getB0())) {
standbyAutomatonReports.add(ModificationUtils.getInstance().buildCreationReport(
staticVarCompensatorCreationInfos.getB0(),
"Fixed part of susceptance"));
}
if (Objects.nonNull(staticVarCompensatorCreationInfos.getQ0())) {
standbyAutomatonReports.add(ModificationUtils.getInstance().buildCreationReport(
staticVarCompensatorCreationInfos.getQ0(),
"Fixed part of Q at nominal voltage"));
}
standbyAutomatonReports.add(ModificationUtils.getInstance().buildCreationReport(
staticVarCompensatorCreationInfos.getLowVoltageSetpoint(),
"Low voltage set point"));
Expand All @@ -163,12 +164,10 @@ private void reportStaticVarCompensatorStandbyAutomaton(StaticVarCompensatorCrea
} catch (PowsyblException e) {
standbyAutomatonReports.add(ReportNode.newRootReportNode()
.withMessageTemplate("StandbyAutomatonExtensionAddError",
"Cannot add standby automaton extension on static var compensator with id=${id} : ${message}")
.withUntypedValue("id", staticVarCompensatorCreationInfos.getEquipmentId())
"Cannot add standby automaton extension on ${message}")
.withUntypedValue("message", e.getMessage())
.withSeverity(TypedValue.ERROR_SEVERITY)
.build());

}
ModificationUtils.getInstance().reportModifications(subReportNode, standbyAutomatonReports,
"StandbyAutomatonCreated", "Standby automaton");
Expand All @@ -179,14 +178,18 @@ private void createStaticVarCompensatorInBusBreaker(VoltageLevel voltageLevel, S
ReportNode subReportNode) {

Bus bus = ModificationUtils.getInstance().getBusBreakerBus(voltageLevel, staticVarCompensatorCreationInfos.getBusOrBusbarSectionId());
double bMax = Objects.isNull(staticVarCompensatorCreationInfos.getMaxSusceptance()) && Objects.nonNull(staticVarCompensatorCreationInfos.getMaxQAtNominalV()) ?
(staticVarCompensatorCreationInfos.getMaxQAtNominalV()) / Math.pow(voltageLevel.getNominalV(), 2) : staticVarCompensatorCreationInfos.getMaxSusceptance();
double bMin = Objects.isNull(staticVarCompensatorCreationInfos.getMinSusceptance()) && Objects.nonNull(staticVarCompensatorCreationInfos.getMinQAtNominalV()) ?
(staticVarCompensatorCreationInfos.getMinQAtNominalV()) / Math.pow(voltageLevel.getNominalV(), 2) : staticVarCompensatorCreationInfos.getMinSusceptance();
/* creating the static var compensator */
StaticVarCompensator staticVarCompensator = voltageLevel.newStaticVarCompensator()
.setId(staticVarCompensatorCreationInfos.getEquipmentId())
.setName(staticVarCompensatorCreationInfos.getEquipmentName())
.setBus(bus.getId())
.setConnectableBus(bus.getId())
.setBmax(staticVarCompensatorCreationInfos.getMaxSusceptance())
.setBmin(staticVarCompensatorCreationInfos.getMinSusceptance())
.setBmax(bMax)
.setBmin(bMin)
.setVoltageSetpoint(staticVarCompensatorCreationInfos.getVoltageSetpoint())
.setReactivePowerSetpoint(staticVarCompensatorCreationInfos.getReactivePowerSetpoint())
.setRegulationMode(staticVarCompensatorCreationInfos.getRegulationMode())
Expand All @@ -195,13 +198,33 @@ private void createStaticVarCompensatorInBusBreaker(VoltageLevel voltageLevel, S
addExtensionsToStaticVarCompensator(staticVarCompensatorCreationInfos, staticVarCompensator, voltageLevel, subReportNode);
}

private void createStaticVarCompensatorVoltageRegulation(StaticVarCompensatorCreationInfos staticVarCompensatorCreationInfos,
StaticVarCompensator staticVarCompensator, VoltageLevel voltageLevel, ReportNode subReportNode) {
private void reportStaticVarCompensatorLimitsAndSetpoints(StaticVarCompensatorCreationInfos staticVarCompensatorCreationInfos,
StaticVarCompensator staticVarCompensator, VoltageLevel voltageLevel, ReportNode subReportNode) {
List<ReportNode> voltageReports = new ArrayList<>();
voltageReports.add(ModificationUtils.getInstance()
.createEnabledDisabledReport("VoltageRegulationOn", modificationInfos.getVoltageRegulationType() == VoltageRegulationType.DISTANT &&
modificationInfos.getRegulationMode() == StaticVarCompensator.RegulationMode.VOLTAGE));
voltageReports.add(ModificationUtils.getInstance().buildCreationReport(staticVarCompensatorCreationInfos.getVoltageSetpoint(), "Voltage set point"));
if (Objects.nonNull(staticVarCompensatorCreationInfos.getMinSusceptance())) {
voltageReports.add(ModificationUtils.getInstance().buildCreationReport(staticVarCompensatorCreationInfos.getMinSusceptance(), "Susceptance min"));
}
if (Objects.nonNull(staticVarCompensatorCreationInfos.getMaxSusceptance())) {
voltageReports.add(ModificationUtils.getInstance().buildCreationReport(staticVarCompensatorCreationInfos.getMaxSusceptance(), "Susceptance max"));
}
if (Objects.nonNull(staticVarCompensatorCreationInfos.getMinQAtNominalV())) {
voltageReports.add(ModificationUtils.getInstance().buildCreationReport(staticVarCompensatorCreationInfos.getMinQAtNominalV(), "Q min at nominal voltage"));
}
if (Objects.nonNull(staticVarCompensatorCreationInfos.getMaxQAtNominalV())) {
voltageReports.add(ModificationUtils.getInstance().buildCreationReport(staticVarCompensatorCreationInfos.getMaxQAtNominalV(), "Q max at nominal voltage"));
}
if (Objects.nonNull(staticVarCompensatorCreationInfos.getRegulationMode())) {
voltageReports.add(ModificationUtils.getInstance().buildCreationReport(staticVarCompensatorCreationInfos.getRegulationMode(), "regulation mode"));
}
if (Objects.nonNull(staticVarCompensatorCreationInfos.getVoltageSetpoint())) {
voltageReports.add(ModificationUtils.getInstance().buildCreationReport(staticVarCompensatorCreationInfos.getVoltageSetpoint(), "Voltage set point"));
}
if (Objects.nonNull(staticVarCompensatorCreationInfos.getReactivePowerSetpoint())) {
voltageReports.add(ModificationUtils.getInstance().buildCreationReport(staticVarCompensatorCreationInfos.getReactivePowerSetpoint(), "Reactive power set point"));
}
if (Objects.nonNull(staticVarCompensatorCreationInfos.getVoltageRegulationType())) {
voltageReports.add(ModificationUtils.getInstance().buildCreationReport(staticVarCompensatorCreationInfos.getVoltageRegulationType(), "Voltage Regulation type"));
}
if (staticVarCompensatorCreationInfos.getRegulatingTerminalVlId() != null && staticVarCompensatorCreationInfos.getRegulatingTerminalId() != null &&
staticVarCompensatorCreationInfos.getRegulatingTerminalType() != null) {
Terminal terminal = ModificationUtils.getInstance().getTerminalFromIdentifiable(voltageLevel.getNetwork(),
Expand All @@ -212,7 +235,7 @@ private void createStaticVarCompensatorVoltageRegulation(StaticVarCompensatorCre
updateCompensatorRegulatingTerminal(staticVarCompensatorCreationInfos, staticVarCompensator, terminal, voltageReports);
}
}
ModificationUtils.getInstance().reportModifications(subReportNode, voltageReports, "VoltageRegulationCreated", "Voltage regulation");
ModificationUtils.getInstance().reportModifications(subReportNode, voltageReports, "LimitsAndSetpointsCreated", "Limits and Setpoints");
}

private void updateCompensatorRegulatingTerminal(StaticVarCompensatorCreationInfos staticVarCompensatorCreationInfos, StaticVarCompensator staticVarCompensator,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.powsybl.iidm.network.*;
import com.powsybl.iidm.network.extensions.ActivePowerControl;
import com.powsybl.iidm.network.extensions.ConnectablePosition;
import com.powsybl.iidm.network.extensions.GeneratorShortCircuit;
import com.powsybl.iidm.network.extensions.GeneratorStartup;
import org.gridsuite.modification.server.dto.*;
Expand All @@ -22,6 +23,7 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.IntStream;

import static org.gridsuite.modification.server.utils.NetworkUtil.*;
import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage;
import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
Expand All @@ -47,6 +49,9 @@ protected ModificationInfos buildModification() {
.equipmentName(new AttributeModification<>("newV1Generator", OperationType.SET))
.voltageLevelId(new AttributeModification<>("v2", OperationType.SET))
.busOrBusbarSectionId(new AttributeModification<>("1B", OperationType.SET))
.connectionName(new AttributeModification<>("idGenerator", OperationType.SET))
.connectionPosition(new AttributeModification<>(1, OperationType.SET))
.connectionDirection(new AttributeModification<>(ConnectablePosition.Direction.TOP, OperationType.SET))
.targetP(new AttributeModification<>(80.0, OperationType.SET))
.targetQ(new AttributeModification<>(40.0, OperationType.SET))
.targetV(new AttributeModification<>(48.0, OperationType.SET))
Expand Down Expand Up @@ -442,6 +447,24 @@ void testUnsetAttributes() throws Exception {

}

@Test
void changeGeneratorOnBusBreakerWithoutBusBarSection() throws Exception {
VoltageLevel v1 = createVoltageLevel(getNetwork().getSubstation("s1"), "v11", "v32", TopologyKind.BUS_BREAKER, 380.0);
createBusBarSection(getNetwork().getVoltageLevel("v1"), "1.7", "1.7", 0);
createBus(v1, "bus111", "bus111");
createGeneratorOnBus(v1, "idGenerator1", "bus111", 42.1, 1.0);
GeneratorModificationInfos generatorModificationInfos = GeneratorModificationInfos.builder()
.stashed(false)
.equipmentId("idGenerator1")
.connectionPosition(new AttributeModification<>(1, OperationType.SET))
.build();
String generatorModificationInfosJson = mapper.writeValueAsString(generatorModificationInfos);
mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
generatorModificationInfos = (GeneratorModificationInfos) modificationRepository.getModifications(getGroupId(), false, true).get(0);
assertEquals(1, generatorModificationInfos.getConnectionPosition().getValue());
}

@Override
protected void testCreationModificationMessage(ModificationInfos modificationInfos) throws Exception {
assertEquals("GENERATOR_MODIFICATION", modificationInfos.getMessageType());
Expand Down
Loading

0 comments on commit 16ea505

Please sign in to comment.