Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public void loadFlowDiverged(RunningContext runningContext) {
runningContext.getContingency(),
PostContingencyComputationStatus.FAILED,
new LimitViolationsResult(Collections.emptyList(), getPostContingencyActions(runningContext.getContingency())),
NetworkResult.empty(), ConnectivityResult.empty(), Double.NaN
NetworkResult.empty(), ConnectivityResult.empty(), Double.NaN, Collections.emptyMap()
)
);
}
Expand All @@ -81,7 +81,7 @@ public void loadFlowConverged(RunningContext runningContext, List<LimitViolation
runningContext.getContingency(),
PostContingencyComputationStatus.CONVERGED,
new LimitViolationsResult(violations, getPostContingencyActions(runningContext.getContingency())),
NetworkResult.empty(), ConnectivityResult.empty(), Double.NaN
NetworkResult.empty(), ConnectivityResult.empty(), Double.NaN, Collections.emptyMap()
)
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,8 @@ private static SecurityAnalysisResult resultForContingency(String id) {
Collections.singletonList(
new PostContingencyResult(
new Contingency(id), PostContingencyComputationStatus.CONVERGED,
LimitViolationsResult.empty(), NetworkResult.empty(), ConnectivityResult.empty(), Double.NaN)
LimitViolationsResult.empty(), NetworkResult.empty(), ConnectivityResult.empty(), Double.NaN,
Collections.emptyMap())
)
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,17 @@ public class SecurityAnalysisResult extends AbstractExtendable<SecurityAnalysisR
private final List<OperatorStrategyResult> operatorStrategyResults;

public static SecurityAnalysisResult empty() {
return new SecurityAnalysisResult(new PreContingencyResult(LoadFlowResult.ComponentResult.Status.CONVERGED, LimitViolationsResult.empty(), NetworkResult.empty(), Double.NaN),
Collections.emptyList(), Collections.emptyList());
PreContingencyResult preContingencyResult = new PreContingencyResult(
LoadFlowResult.ComponentResult.Status.CONVERGED, LimitViolationsResult.empty(), NetworkResult.empty(),
Double.NaN, Collections.emptyMap());
return new SecurityAnalysisResult(preContingencyResult, Collections.emptyList(), Collections.emptyList());
}

public SecurityAnalysisResult(LimitViolationsResult preContingencyResult,
LoadFlowResult.ComponentResult.Status preContingencyStatus,
List<PostContingencyResult> postContingencyResults) {
this(new PreContingencyResult(preContingencyStatus, preContingencyResult, NetworkResult.empty(), Double.NaN),
this(new PreContingencyResult(preContingencyStatus, preContingencyResult, NetworkResult.empty(),
Double.NaN, Collections.emptyMap()),
postContingencyResults, Collections.emptyList());
}

Expand All @@ -47,8 +50,13 @@ public SecurityAnalysisResult(LimitViolationsResult preContingencyResult,
List<BusResult> preContingencyBusResults,
List<ThreeWindingsTransformerResult> preContingencyThreeWindingsTransformerResults,
List<OperatorStrategyResult> operatorStrategyResults) {
this(new PreContingencyResult(preContingencyStatus, preContingencyResult,
new NetworkResult(preContingencyBranchResults, preContingencyBusResults, preContingencyThreeWindingsTransformerResults), Double.NaN),
this(new PreContingencyResult(
preContingencyStatus,
preContingencyResult,
new NetworkResult(preContingencyBranchResults, preContingencyBusResults,
preContingencyThreeWindingsTransformerResults),
Double.NaN,
Collections.emptyMap()),
postContingencyResults, operatorStrategyResults);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ public SecurityAnalysisResultBuilder endPreContingency() {
List<LimitViolation> filteredViolations = filter.apply(violations, context.getNetwork());
preContingencyResult = new PreContingencyResult(status,
new LimitViolationsResult(filteredViolations),
new NetworkResult(branchResults, busResults, threeWindingsTransformerResults), distributedActivePower);
new NetworkResult(branchResults, busResults, threeWindingsTransformerResults), distributedActivePower, Collections.emptyMap());
interceptors.forEach(i -> i.onPreContingencyResult(preContingencyResult, resultContext));
return SecurityAnalysisResultBuilder.this;
}
Expand Down Expand Up @@ -287,7 +287,8 @@ public SecurityAnalysisResultBuilder endContingency() {
new LimitViolationsResult(filteredViolations, Collections.emptyList()),
new NetworkResult(branchResults, busResults, threeWindingsTransformerResults),
connectivityResult,
distributedActivePower
distributedActivePower,
Collections.emptyMap()
);
interceptors.forEach(i -> i.onPostContingencyResult(res, resultContext));
addPostContingencyResult(res);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,16 @@
import com.powsybl.commons.json.JsonUtil;
import com.powsybl.contingency.Contingency;
import com.powsybl.security.PostContingencyComputationStatus;
import com.powsybl.security.results.*;
import com.powsybl.security.results.ConnectivityResult;
import com.powsybl.security.results.MovedPhaseShifterResult;
import com.powsybl.security.results.NetworkResult;
import com.powsybl.security.results.PostContingencyResult;

import java.io.IOException;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import static com.powsybl.security.json.SecurityAnalysisResultDeserializer.SOURCE_VERSION_ATTRIBUTE;
Expand All @@ -34,40 +41,47 @@ private static final class ParsingContext {
Contingency contingency = null;
PostContingencyComputationStatus status = null;
ConnectivityResult connectivityResult = null;
Map<String, MovedPhaseShifterResult> phaseShifterResults = Collections.emptyMap();
}

@Override
public PostContingencyResult deserialize(JsonParser parser, DeserializationContext deserializationContext) throws IOException {
String version = JsonUtil.getSourceVersion(deserializationContext, SOURCE_VERSION_ATTRIBUTE);
if (version == null) { // assuming current version...
if (version == null) {
Comment thread
RiadBRD marked this conversation as resolved.
Outdated
version = SecurityAnalysisResultSerializer.VERSION;
}
final String finalVersion = version;
ParsingContext parsingContext = new ParsingContext();
AbstractContingencyResultDeserializer.ParsingContext commonParsingContext = new AbstractContingencyResultDeserializer.ParsingContext();
JsonUtil.parsePolymorphicObject(parser, name -> parsePostContingencyResult(parser, deserializationContext, parsingContext, finalVersion, commonParsingContext, name));
AbstractContingencyResultDeserializer.ParsingContext commonParsingContext =
new AbstractContingencyResultDeserializer.ParsingContext();
JsonUtil.parsePolymorphicObject(parser, name -> parsePostContingencyResult(
parser, deserializationContext, parsingContext, finalVersion, commonParsingContext, name));

if (parsingContext.connectivityResult == null) {
parsingContext.connectivityResult = ConnectivityResult.empty();
}

if (version.compareTo("1.3") < 0) {
if (finalVersion.compareTo("1.3") < 0) {
Objects.requireNonNull(commonParsingContext.limitViolationsResult);
parsingContext.status = commonParsingContext.limitViolationsResult.isComputationOk() ? PostContingencyComputationStatus.CONVERGED : PostContingencyComputationStatus.FAILED;
parsingContext.status = commonParsingContext.limitViolationsResult.isComputationOk()
? PostContingencyComputationStatus.CONVERGED
: PostContingencyComputationStatus.FAILED;
}
return new PostContingencyResult(
parsingContext.contingency, parsingContext.status,
commonParsingContext.limitViolationsResult,
Objects.requireNonNullElseGet(commonParsingContext.networkResult,
() -> new NetworkResult(commonParsingContext.branchResults, commonParsingContext.busResults, commonParsingContext.threeWindingsTransformerResults)),
parsingContext.connectivityResult, commonParsingContext.distributedActivePower);
() -> new NetworkResult(commonParsingContext.branchResults,
commonParsingContext.busResults, commonParsingContext.threeWindingsTransformerResults)),
parsingContext.connectivityResult, commonParsingContext.distributedActivePower,
parsingContext.phaseShifterResults);
}

private boolean parsePostContingencyResult(JsonParser parser, DeserializationContext deserializationContext,
ParsingContext parsingContext, String finalVersion,
AbstractContingencyResultDeserializer.ParsingContext commonParsingContext,
String name) throws IOException {
boolean found = deserializeCommonAttributes(parser, commonParsingContext, name, deserializationContext, finalVersion, CONTEXT_NAME);
ParsingContext parsingContext, String finalVersion,
AbstractContingencyResultDeserializer.ParsingContext commonParsingContext,
String name) throws IOException {
boolean found = deserializeCommonAttributes(parser, commonParsingContext, name, deserializationContext,
finalVersion, CONTEXT_NAME);
if (found) {
return true;
}
Expand All @@ -78,18 +92,36 @@ private boolean parsePostContingencyResult(JsonParser parser, DeserializationCon
return true;
case "status":
parser.nextToken();
JsonUtil.assertGreaterOrEqualThanReferenceVersion(CONTEXT_NAME, "Tag: status",
finalVersion, "1.3");
parsingContext.status = JsonUtil.readValue(deserializationContext, parser, PostContingencyComputationStatus.class);
JsonUtil.assertGreaterOrEqualThanReferenceVersion(CONTEXT_NAME, "Tag: status", finalVersion, "1.3");
parsingContext.status = JsonUtil.readValue(deserializationContext, parser,
PostContingencyComputationStatus.class);
return true;
case "connectivityResult":
parser.nextToken();
JsonUtil.assertGreaterOrEqualThanReferenceVersion(CONTEXT_NAME, "Tag: connectivityResult",
finalVersion, "1.4");
JsonUtil.assertGreaterOrEqualThanReferenceVersion(
CONTEXT_NAME, "Tag: connectivityResult", finalVersion, "1.4");
parsingContext.connectivityResult = JsonUtil.readValue(deserializationContext, parser, ConnectivityResult.class);
return true;
case "phaseShifterResults":
parser.nextToken();
JsonUtil.assertGreaterOrEqualThanReferenceVersion(
CONTEXT_NAME, "Tag: phaseShifterResults", finalVersion, "2.0");
Comment thread
RiadBRD marked this conversation as resolved.
Outdated
parsingContext.phaseShifterResults = readPhaseShifterResults(parser, deserializationContext);
return true;
default:
return false;
}
}

private static Map<String, MovedPhaseShifterResult> readPhaseShifterResults(
Comment thread
RiadBRD marked this conversation as resolved.
Outdated
JsonParser parser, DeserializationContext deserializationContext) throws IOException {
Map<String, MovedPhaseShifterResult> results = new LinkedHashMap<>();
List<?> list = JsonUtil.readList(deserializationContext, parser, MovedPhaseShifterResult.class);
for (Object obj : list) {
if (obj instanceof MovedPhaseShifterResult result) {
results.put(result.transformerId(), result);
}
}
Comment thread
RiadBRD marked this conversation as resolved.
Outdated
return results;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,18 @@ public void serialize(PostContingencyResult postContingencyResult, JsonGenerator
serializerProvider.defaultSerializeField("networkResult", postContingencyResult.getNetworkResult(), jsonGenerator);
serializerProvider.defaultSerializeField("connectivityResult", postContingencyResult.getConnectivityResult(), jsonGenerator);
JsonUtil.writeOptionalDoubleField(jsonGenerator, "distributedActivePower", postContingencyResult.getDistributedActivePower());
if (!postContingencyResult.getPhaseShifterResults().isEmpty()) {
jsonGenerator.writeFieldName("phaseShifterResults");
jsonGenerator.writeStartArray();
for (var psr : postContingencyResult.getPhaseShifterResults().values()) {
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("transformerId", psr.transformerId());
jsonGenerator.writeNumberField("initialTap", psr.initialTap());
jsonGenerator.writeNumberField("newTap", psr.newTap());
jsonGenerator.writeEndObject();
}
jsonGenerator.writeEndArray();
}
jsonGenerator.writeEndObject();
}
}
Loading
Loading