Skip to content

Commit 96cc4bd

Browse files
Merge remote-tracking branch 'origin/main' into add_logs
2 parents 8fb02ec + 09e4eaa commit 96cc4bd

File tree

7 files changed

+96
-19
lines changed

7 files changed

+96
-19
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
</developers>
5050

5151
<properties>
52-
<powsybl-ws-dependencies.version>2.7.0</powsybl-ws-dependencies.version>
53-
<powsybl-open-reac.version>0.5.0</powsybl-open-reac.version>
52+
<powsybl-ws-dependencies.version>2.8.0</powsybl-ws-dependencies.version>
53+
<powsybl-open-reac.version>0.6.0</powsybl-open-reac.version>
5454
<mockito-inline.version>3.11.1</mockito-inline.version>
5555
<liquibase-hibernate-package>org.gridsuite.voltageinit.server</liquibase-hibernate-package>
5656
</properties>

src/main/java/org/gridsuite/voltageinit/server/dto/GeneratorModificationInfos.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public class GeneratorModificationInfos {
2121
private String generatorId;
2222

2323
@JsonInclude(JsonInclude.Include.NON_NULL)
24-
private Double voltageSetpoint;
24+
private Double targetV;
2525

2626
@JsonInclude(JsonInclude.Include.NON_NULL)
27-
private Double reactivePowerSetpoint;
27+
private Double targetQ;
2828
}

src/main/java/org/gridsuite/voltageinit/server/dto/ShuntCompensatorModificationInfos.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,7 @@ public class ShuntCompensatorModificationInfos {
2525

2626
@JsonInclude(JsonInclude.Include.NON_NULL)
2727
private Boolean connect;
28+
29+
@JsonInclude(JsonInclude.Include.NON_NULL)
30+
private Double targetV;
2831
}

src/main/java/org/gridsuite/voltageinit/server/dto/TransformerModificationInfos.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ public class TransformerModificationInfos {
2424
@JsonInclude(JsonInclude.Include.NON_NULL)
2525
private Integer ratioTapChangerPosition;
2626

27+
@JsonInclude(JsonInclude.Include.NON_NULL)
28+
private Double ratioTapChangerTargetV;
29+
2730
@JsonInclude(JsonInclude.Include.NON_NULL)
2831
private ThreeSides legSide;
2932
}

src/main/java/org/gridsuite/voltageinit/server/service/NetworkModificationService.java

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,20 @@
1010
import com.fasterxml.jackson.databind.ObjectMapper;
1111

1212
import com.powsybl.commons.PowsyblException;
13+
import com.powsybl.iidm.network.Bus;
14+
import com.powsybl.iidm.network.Identifiable;
15+
import com.powsybl.iidm.network.Network;
16+
import com.powsybl.iidm.network.ShuntCompensator;
17+
import com.powsybl.iidm.network.Terminal;
18+
import com.powsybl.iidm.network.TwoWindingsTransformer;
1319
import com.powsybl.openreac.parameters.output.OpenReacResult;
1420
import org.gridsuite.voltageinit.server.dto.GeneratorModificationInfos;
1521
import org.gridsuite.voltageinit.server.dto.ShuntCompensatorModificationInfos;
1622
import org.gridsuite.voltageinit.server.dto.StaticVarCompensatorModificationInfos;
1723
import org.gridsuite.voltageinit.server.dto.TransformerModificationInfos;
1824
import org.gridsuite.voltageinit.server.dto.VoltageInitModificationInfos;
1925
import org.gridsuite.voltageinit.server.dto.VscConverterStationModificationInfos;
26+
import org.jgrapht.alg.util.Pair;
2027
import org.springframework.beans.factory.annotation.Autowired;
2128
import org.springframework.beans.factory.annotation.Value;
2229
import org.springframework.http.HttpEntity;
@@ -28,8 +35,13 @@
2835
import org.springframework.web.client.RestTemplate;
2936
import org.springframework.web.util.UriComponentsBuilder;
3037

38+
import java.util.Map;
3139
import java.util.Objects;
40+
import java.util.Optional;
3241
import java.util.UUID;
42+
import java.util.concurrent.atomic.AtomicReference;
43+
44+
import static com.powsybl.iidm.network.IdentifiableType.TWO_WINDINGS_TRANSFORMER;
3345

3446
/**
3547
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
@@ -76,28 +88,50 @@ public void deleteModificationsGroup(UUID groupUUid) {
7688
}
7789
}
7890

79-
public UUID createVoltageInitModificationGroup(OpenReacResult result) {
80-
UUID modificationsGroupUuid = null;
91+
private Optional<Bus> getRegulatingBus(Terminal terminal) {
92+
return terminal != null && terminal.getBusView().getBus() != null ? Optional.of(terminal.getBusView().getBus()) : Optional.empty();
93+
}
94+
95+
public UUID createVoltageInitModificationGroup(Network network, OpenReacResult result) {
96+
UUID modificationsGroupUuid;
8197

8298
try {
8399
VoltageInitModificationInfos voltageInitModificationInfos = new VoltageInitModificationInfos();
84100

101+
Map<String, Pair<Double, Double>> voltageProfile = result.getVoltageProfile();
102+
85103
// generator modifications
86104
result.getGeneratorModifications().forEach(gm -> {
87105
if (gm.getModifs().getTargetV() != null || gm.getModifs().getTargetQ() != null) {
88106
GeneratorModificationInfos.GeneratorModificationInfosBuilder builder = GeneratorModificationInfos.builder()
89107
.generatorId(gm.getGeneratorId())
90-
.voltageSetpoint(gm.getModifs().getTargetV())
91-
.reactivePowerSetpoint(gm.getModifs().getTargetQ());
108+
.targetV(gm.getModifs().getTargetV())
109+
.targetQ(gm.getModifs().getTargetQ());
92110
voltageInitModificationInfos.addGeneratorModification(builder.build());
93111
}
94112
});
95113

96114
// transformer modifications
115+
AtomicReference<Double> targetV = new AtomicReference<>();
97116
result.getTapPositionModifications().forEach(tp -> {
117+
targetV.set(null);
118+
Identifiable<?> identifiable = network.getIdentifiable(tp.getTransformerId());
119+
if (identifiable != null && identifiable.getType() == TWO_WINDINGS_TRANSFORMER) { // Only for 2WT
120+
TwoWindingsTransformer twoWindingsTransformer = (TwoWindingsTransformer) identifiable;
121+
if (twoWindingsTransformer.getRatioTapChanger() != null) {
122+
Optional<Bus> bus = getRegulatingBus(twoWindingsTransformer.getRatioTapChanger().getRegulationTerminal());
123+
bus.ifPresent(b -> {
124+
Pair<Double, Double> busUpdate = voltageProfile.get(b.getId());
125+
if (busUpdate != null) {
126+
targetV.set(busUpdate.getFirst() * b.getVoltageLevel().getNominalV());
127+
}
128+
});
129+
}
130+
}
98131
TransformerModificationInfos.TransformerModificationInfosBuilder builder = TransformerModificationInfos.builder()
99132
.transformerId(tp.getTransformerId())
100133
.ratioTapChangerPosition(tp.getTapPosition())
134+
.ratioTapChangerTargetV(targetV.get())
101135
.legSide(tp.getLegSide());
102136
voltageInitModificationInfos.addTransformerModification(builder.build());
103137
});
@@ -126,10 +160,22 @@ public UUID createVoltageInitModificationGroup(OpenReacResult result) {
126160

127161
// shunt compensator modifications
128162
result.getShuntsModifications().forEach(shuntCompensatorModification -> {
163+
targetV.set(null);
164+
ShuntCompensator shuntCompensator = network.getShuntCompensator(shuntCompensatorModification.getShuntCompensatorId());
165+
if (shuntCompensator != null) {
166+
Optional<Bus> bus = getRegulatingBus(shuntCompensator.getRegulatingTerminal());
167+
bus.ifPresent(b -> {
168+
Pair<Double, Double> busUpdate = voltageProfile.get(b.getId());
169+
if (busUpdate != null) {
170+
targetV.set(busUpdate.getFirst() * b.getVoltageLevel().getNominalV());
171+
}
172+
});
173+
}
129174
ShuntCompensatorModificationInfos.ShuntCompensatorModificationInfosBuilder builder = ShuntCompensatorModificationInfos.builder()
130175
.shuntCompensatorId(shuntCompensatorModification.getShuntCompensatorId())
131176
.sectionCount(shuntCompensatorModification.getSectionCount())
132-
.connect(shuntCompensatorModification.getConnect());
177+
.connect(shuntCompensatorModification.getConnect())
178+
.targetV(targetV.get());
133179
voltageInitModificationInfos.addShuntCompensatorModification(builder.build());
134180
});
135181

src/main/java/org/gridsuite/voltageinit/server/service/VoltageInitWorkerService.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.powsybl.openreac.parameters.output.OpenReacResult;
1919
import com.powsybl.openreac.parameters.output.OpenReacStatus;
2020
import org.apache.commons.lang3.StringUtils;
21+
import org.apache.commons.lang3.tuple.Pair;
2122
import org.gridsuite.voltageinit.server.repository.VoltageInitResultRepository;
2223
import org.gridsuite.voltageinit.server.service.parameters.VoltageInitParametersService;
2324
import org.slf4j.Logger;
@@ -105,7 +106,7 @@ private Network getNetwork(UUID networkUuid, String variantId) {
105106
return network;
106107
}
107108

108-
private OpenReacResult run(VoltageInitRunContext context, UUID resultUuid) throws Exception {
109+
private Pair<Network, OpenReacResult> run(VoltageInitRunContext context, UUID resultUuid) throws Exception {
109110
Objects.requireNonNull(context);
110111

111112
LOGGER.info("Run voltage init...");
@@ -123,7 +124,7 @@ private OpenReacResult run(VoltageInitRunContext context, UUID resultUuid) throw
123124
reportService.sendReport(context.getReportUuid(), context.getRootReporter()));
124125
}
125126

126-
return future == null ? null : voltageInitObserver.observeRun("run", future::get);
127+
return future == null ? Pair.of(network, null) : Pair.of(network, voltageInitObserver.observeRun("run", future::get));
127128
}
128129

129130
public CompletableFuture<OpenReacResult> runVoltageInitAsync(VoltageInitRunContext context, Network network, UUID resultUuid) {
@@ -175,18 +176,20 @@ public Consumer<Message<String>> consumeRun() {
175176
AtomicReference<Long> startTime = new AtomicReference<>();
176177

177178
startTime.set(System.nanoTime());
178-
OpenReacResult result = run(resultContext.getRunContext(), resultContext.getResultUuid());
179+
Pair<Network, OpenReacResult> res = run(resultContext.getRunContext(), resultContext.getResultUuid());
180+
Network network = res.getLeft();
181+
OpenReacResult openReacResult = res.getRight();
179182
long nanoTime = System.nanoTime();
180183
LOGGER.info("Just run in {}s", TimeUnit.NANOSECONDS.toSeconds(nanoTime - startTime.getAndSet(nanoTime)));
181184

182-
UUID modificationsGroupUuid = networkModificationService.createVoltageInitModificationGroup(result);
183-
voltageInitObserver.observe("results.save", () ->
184-
resultRepository.insert(resultContext.getResultUuid(), result, modificationsGroupUuid, result.getStatus().name()));
185-
LOGGER.info("Status : {}", result.getStatus());
186-
LOGGER.info("Reactive slacks : {}", result.getReactiveSlacks());
187-
LOGGER.info("Indicators : {}", result.getIndicators());
185+
if (openReacResult != null) { // result available
186+
UUID modificationsGroupUuid = networkModificationService.createVoltageInitModificationGroup(network, openReacResult);
187+
voltageInitObserver.observe("results.save", () ->
188+
resultRepository.insert(resultContext.getResultUuid(), openReacResult, modificationsGroupUuid, openReacResult.getStatus().name()));
189+
LOGGER.info("Status : {}", openReacResult.getStatus());
190+
LOGGER.info("Reactive slacks : {}", openReacResult.getReactiveSlacks());
191+
LOGGER.info("Indicators : {}", openReacResult.getIndicators());
188192

189-
if (result != null) { // result available
190193
notificationService.sendResultMessage(resultContext.getResultUuid(), resultContext.getRunContext().getReceiver());
191194
LOGGER.info("Voltage initialization complete (resultUuid='{}')", resultContext.getResultUuid());
192195
} else { // result not available : stop computation request

src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.gridsuite.voltageinit.server.service.UuidGeneratorService;
4444
import org.gridsuite.voltageinit.server.service.parameters.FilterService;
4545
import org.gridsuite.voltageinit.server.util.annotations.PostCompletionAdapter;
46+
import org.jgrapht.alg.util.Pair;
4647
import org.junit.jupiter.api.AfterEach;
4748
import org.junit.jupiter.api.BeforeEach;
4849
import org.junit.jupiter.api.Test;
@@ -151,10 +152,16 @@ private void buildOpenReacResult() {
151152
openReacAmplIOFiles.getNetworkModifications().getGeneratorModifications().add(new GeneratorModification("GEN2", m2));
152153

153154
openReacAmplIOFiles.getNetworkModifications().getTapPositionModifications().add(new RatioTapPositionModification("NHV2_NLOAD", 2));
155+
openReacAmplIOFiles.getNetworkModifications().getTapPositionModifications().add(new RatioTapPositionModification("unknown2WT", 2));
154156

155157
openReacAmplIOFiles.getNetworkModifications().getSvcModifications().add(new StaticVarCompensatorModification("SVC_1", 227., 50.));
156158
openReacAmplIOFiles.getNetworkModifications().getVscModifications().add(new VscConverterStationModification("VSC_1", 385., 70.));
157159
openReacAmplIOFiles.getNetworkModifications().getShuntModifications().add(new ShuntCompensatorModification("SHUNT_1", true, 1));
160+
openReacAmplIOFiles.getNetworkModifications().getShuntModifications().add(new ShuntCompensatorModification("unknownShunt", true, 1));
161+
162+
Map<String, Pair<Double, Double>> voltageProfile = openReacAmplIOFiles.getVoltageProfileOutput().getVoltageProfile();
163+
voltageProfile.put("NHV2_NLOAD_busId1", Pair.of(100., 100.));
164+
voltageProfile.put("SHUNT_1_busId1", Pair.of(100., 100.));
158165

159166
openReacResult = new OpenReacResult(OpenReacStatus.OK, openReacAmplIOFiles, INDICATORS);
160167
}
@@ -206,6 +213,21 @@ public void setUp() throws Exception {
206213

207214
// network store service mocking
208215
network = EurostagTutorialExample1Factory.createWithMoreGenerators(new NetworkFactoryImpl());
216+
network.getVoltageLevel("VLGEN").newShuntCompensator()
217+
.setId("SHUNT_1")
218+
.setBus("NGEN")
219+
.setConnectableBus("NGEN")
220+
.setTargetV(30.)
221+
.setTargetDeadband(10)
222+
.setVoltageRegulatorOn(false)
223+
.newLinearModel()
224+
.setMaximumSectionCount(1)
225+
.setBPerSection(1)
226+
.setGPerSection(1)
227+
.add()
228+
.setSectionCount(1)
229+
.add();
230+
209231
network.getVariantManager().cloneVariant(VariantManagerConstants.INITIAL_VARIANT_ID, VARIANT_1_ID);
210232
network.getVariantManager().cloneVariant(VariantManagerConstants.INITIAL_VARIANT_ID, VARIANT_2_ID);
211233
network.getVariantManager().cloneVariant(VariantManagerConstants.INITIAL_VARIANT_ID, VARIANT_3_ID);

0 commit comments

Comments
 (0)