diff --git a/cgmes/cgmes-conformity/src/main/resources/conformity-modified/cas-1.1.3-data-4.0.3/MicroGrid/BaseCase/BC_BE_v2_transformer_at_boundary/MicroGridTestConfiguration_BC_BE_EQ_V2.xml b/cgmes/cgmes-conformity/src/main/resources/conformity-modified/cas-1.1.3-data-4.0.3/MicroGrid/BaseCase/BC_BE_v2_transformer_at_boundary/MicroGridTestConfiguration_BC_BE_EQ_V2.xml
index 7590882ad0c..eabb8e938eb 100644
--- a/cgmes/cgmes-conformity/src/main/resources/conformity-modified/cas-1.1.3-data-4.0.3/MicroGrid/BaseCase/BC_BE_v2_transformer_at_boundary/MicroGridTestConfiguration_BC_BE_EQ_V2.xml
+++ b/cgmes/cgmes-conformity/src/main/resources/conformity-modified/cas-1.1.3-data-4.0.3/MicroGrid/BaseCase/BC_BE_v2_transformer_at_boundary/MicroGridTestConfiguration_BC_BE_EQ_V2.xml
@@ -1427,7 +1427,7 @@
-
+
BE-TR2_1
BE-T_1
400.000000
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/Context.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/Context.java
index fec6eca4fd2..b571319afe5 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/Context.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/Context.java
@@ -18,7 +18,6 @@
import com.powsybl.iidm.network.IdentifiableType;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.Terminal;
-import com.powsybl.triplestore.api.PropertyBag;
import com.powsybl.triplestore.api.PropertyBags;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,11 +58,15 @@ public Context(CgmesModel cgmes, Config config, Network network, ReportNode repo
regulatingControlMapping = new RegulatingControlMapping(this);
nodeMapping = new NodeMapping(this);
- ratioTapChangerTables = new HashMap<>();
- phaseTapChangerTables = new HashMap<>();
- reactiveCapabilityCurveData = new HashMap<>();
- powerTransformerRatioTapChangers = new HashMap<>();
- powerTransformerPhaseTapChangers = new HashMap<>();
+ cachedGroupedTransformerEnds = new HashMap<>();
+ cachedGroupedRatioTapChangers = new HashMap<>();
+ cachedGroupedRatioTapChangerTablePoints = new HashMap<>();
+ cachedGroupedPhaseTapChangers = new HashMap<>();
+ cachedGroupedPhaseTapChangerTablePoints = new HashMap<>();
+ cachedGroupedShuntCompensatorPoints = new HashMap<>();
+ cachedGroupedReactiveCapabilityCurveData = new HashMap<>();
+
+ buildCaches();
}
public CgmesModel cgmes() {
@@ -138,71 +141,49 @@ public static String boundarySubstationId(String nodeId) {
return nodeId + "_S";
}
- public void loadReactiveCapabilityCurveData() {
- PropertyBags rccdata = cgmes.reactiveCapabilityCurveData();
- if (rccdata == null) {
- return;
- }
- rccdata.forEach(p -> {
- String curveId = p.getId("ReactiveCapabilityCurve");
- reactiveCapabilityCurveData.computeIfAbsent(curveId, cid -> new PropertyBags()).add(p);
- });
- }
-
- public PropertyBags reactiveCapabilityCurveData(String curveId) {
- return reactiveCapabilityCurveData.get(curveId);
+ private void buildCaches() {
+ buildCache(cachedGroupedTransformerEnds, cgmes().transformerEnds(), CgmesNames.POWER_TRANSFORMER);
+ buildCache(cachedGroupedRatioTapChangers, cgmes().ratioTapChangers(), CgmesNames.POWER_TRANSFORMER);
+ buildCache(cachedGroupedRatioTapChangerTablePoints, cgmes().ratioTapChangerTablePoints(), CgmesNames.RATIO_TAP_CHANGER_TABLE);
+ buildCache(cachedGroupedPhaseTapChangers, cgmes().phaseTapChangers(), CgmesNames.POWER_TRANSFORMER);
+ buildCache(cachedGroupedPhaseTapChangerTablePoints, cgmes().phaseTapChangerTablePoints(), CgmesNames.PHASE_TAP_CHANGER_TABLE);
+ buildCache(cachedGroupedShuntCompensatorPoints, cgmes().nonlinearShuntCompensatorPoints(), "Shunt");
+ buildCache(cachedGroupedReactiveCapabilityCurveData, cgmes().reactiveCapabilityCurveData(), "ReactiveCapabilityCurve");
}
- public void loadRatioTapChangers() {
- cgmes.ratioTapChangers().forEach(ratio -> {
- String id = ratio.getId(CgmesNames.RATIO_TAP_CHANGER);
- powerTransformerRatioTapChangers.put(id, ratio);
+ private void buildCache(Map cache, PropertyBags ps, String groupName) {
+ ps.forEach(p -> {
+ String groupId = p.getId(groupName);
+ cache.computeIfAbsent(groupId, b -> new PropertyBags()).add(p);
});
}
- public PropertyBag ratioTapChanger(String id) {
- return powerTransformerRatioTapChangers.get(id);
+ public PropertyBags transformerEnds(String transformerId) {
+ return cachedGroupedTransformerEnds.getOrDefault(transformerId, new PropertyBags());
}
- public void loadPhaseTapChangers() {
- cgmes.phaseTapChangers().forEach(phase -> {
- String id = phase.getId(CgmesNames.PHASE_TAP_CHANGER);
- powerTransformerPhaseTapChangers.put(id, phase);
- });
+ public PropertyBags ratioTapChangers(String transformerId) {
+ return cachedGroupedRatioTapChangers.getOrDefault(transformerId, new PropertyBags());
}
- public PropertyBag phaseTapChanger(String id) {
- return powerTransformerPhaseTapChangers.get(id);
+ public PropertyBags ratioTapChangerTablePoints(String tableId) {
+ return cachedGroupedRatioTapChangerTablePoints.getOrDefault(tableId, new PropertyBags());
}
- public void loadRatioTapChangerTables() {
- PropertyBags rtcpoints = cgmes.ratioTapChangerTablesPoints();
- if (rtcpoints == null) {
- return;
- }
- rtcpoints.forEach(p -> {
- String tableId = p.getId("RatioTapChangerTable");
- ratioTapChangerTables.computeIfAbsent(tableId, tid -> new PropertyBags()).add(p);
- });
+ public PropertyBags phaseTapChangers(String transformerId) {
+ return cachedGroupedPhaseTapChangers.getOrDefault(transformerId, new PropertyBags());
}
- public void loadPhaseTapChangerTables() {
- PropertyBags ptcpoints = cgmes.phaseTapChangerTablesPoints();
- if (ptcpoints == null) {
- return;
- }
- ptcpoints.forEach(p -> {
- String tableId = p.getId("PhaseTapChangerTable");
- phaseTapChangerTables.computeIfAbsent(tableId, tid -> new PropertyBags()).add(p);
- });
+ public PropertyBags phaseTapChangerTablePoints(String tableId) {
+ return cachedGroupedPhaseTapChangerTablePoints.getOrDefault(tableId, new PropertyBags());
}
- public PropertyBags ratioTapChangerTable(String tableId) {
- return ratioTapChangerTables.get(tableId);
+ public PropertyBags nonlinearShuntCompensatorPoints(String shuntId) {
+ return cachedGroupedShuntCompensatorPoints.getOrDefault(shuntId, new PropertyBags());
}
- public PropertyBags phaseTapChangerTable(String tableId) {
- return phaseTapChangerTables.get(tableId);
+ public PropertyBags reactiveCapabilityCurveData(String curveId) {
+ return cachedGroupedReactiveCapabilityCurveData.getOrDefault(curveId, new PropertyBags());
}
// Handling issues found during conversion
@@ -313,11 +294,13 @@ private static void logIssue(ConversionIssueCategory category, String what, Supp
private final LoadingLimitsMapping loadingLimitsMapping;
private final RegulatingControlMapping regulatingControlMapping;
- private final Map ratioTapChangerTables;
- private final Map phaseTapChangerTables;
- private final Map reactiveCapabilityCurveData;
- private final Map powerTransformerRatioTapChangers;
- private final Map powerTransformerPhaseTapChangers;
+ private final Map cachedGroupedTransformerEnds;
+ private final Map cachedGroupedRatioTapChangers;
+ private final Map cachedGroupedRatioTapChangerTablePoints;
+ private final Map cachedGroupedPhaseTapChangers;
+ private final Map cachedGroupedPhaseTapChangerTablePoints;
+ private final Map cachedGroupedShuntCompensatorPoints;
+ private final Map cachedGroupedReactiveCapabilityCurveData;
private static final Logger LOG = LoggerFactory.getLogger(Context.class);
}
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/Conversion.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/Conversion.java
index 4ef9192b6c5..751a89d519c 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/Conversion.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/Conversion.java
@@ -472,11 +472,6 @@ private Network createNetwork() {
private Context createContext(Network network, ReportNode reportNode) {
Context context = new Context(cgmes, config, network, reportNode);
context.dc().initialize();
- context.loadRatioTapChangers();
- context.loadPhaseTapChangers();
- context.loadRatioTapChangerTables();
- context.loadPhaseTapChangerTables();
- context.loadReactiveCapabilityCurveData();
return context;
}
@@ -688,21 +683,24 @@ private void convertEquivalentBranchesToLines(Context context, Set delay
private void convertTransformers(Context context, Set delayedBoundaryNodes) {
context.pushReportNode(CgmesReports.convertingElementTypeReport(context.getReportNode(), CgmesNames.POWER_TRANSFORMER));
- cgmes.groupedTransformerEnds().forEach((t, ends) -> {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Transformer {}, {}-winding", t, ends.size());
- ends.forEach(e -> LOG.trace(e.tabulateLocals("TransformerEnd")));
- }
- if (ends.size() == 2) {
- convertTwoWindingsTransformers(context, ends, delayedBoundaryNodes);
- } else if (ends.size() == 3) {
- convertThreeWindingsTransformers(context, ends);
- } else {
- String what = "PowerTransformer " + t;
- Supplier reason = () -> String.format("Has %d ends. Only 2 or 3 ends are supported", ends.size());
- context.invalid(what, reason);
- }
- });
+ cgmes.transformers().stream()
+ .map(t -> context.transformerEnds(t.getId("PowerTransformer")))
+ .forEach(ends -> {
+ String transformerId = ends.get(0).getId("PowerTransformer");
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Transformer {}, {}-winding", transformerId, ends.size());
+ ends.forEach(e -> LOG.trace(e.tabulateLocals("TransformerEnd")));
+ }
+ if (ends.size() == 2) {
+ convertTwoWindingsTransformers(context, ends, delayedBoundaryNodes);
+ } else if (ends.size() == 3) {
+ convertThreeWindingsTransformers(context, ends);
+ } else {
+ String what = "PowerTransformer " + transformerId;
+ Supplier reason = () -> String.format("Has %d ends. Only 2 or 3 ends are supported", ends.size());
+ context.invalid(what, reason);
+ }
+ });
context.popReportNode();
}
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/NodeContainerMapping.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/NodeContainerMapping.java
index 4ddeaf4200f..9b41dc7c335 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/NodeContainerMapping.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/NodeContainerMapping.java
@@ -155,7 +155,9 @@ private void buildAdjacency(Map> voltageLevelAdjacency, Map<
boolean fictitiousVoltageLevelForEveryNode = context.config().getCreateFictitiousVoltageLevelsForEveryNode();
context.cgmes().switches().forEach(sw -> addAdjacencyThroughSwitch(voltageLevelAdjacency, substationAdjacency, sw, fictitiousVoltageLevelForEveryNode));
- context.cgmes().groupedTransformerEnds().forEach((t, tends) -> addAdjacencyThroughTransformerEnds(substationAdjacency, tends));
+ context.cgmes().transformers().stream()
+ .map(t -> context.transformerEnds(t.getId("PowerTransformer")))
+ .forEach(tends -> addAdjacencyThroughTransformerEnds(substationAdjacency, tends));
context.cgmes().acLineSegments().forEach(ac -> addAdjacencyThroughBranch(fictitiousVoltageLevelAdjacency, ac, fictitiousVoltageLevelForEveryNode));
context.cgmes().seriesCompensators().forEach(sc -> addAdjacencyThroughBranch(fictitiousVoltageLevelAdjacency, sc, fictitiousVoltageLevelForEveryNode));
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/PhaseAngleClock.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/PhaseAngleClock.java
index bdafeaf8d0f..70f98edfa31 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/PhaseAngleClock.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/PhaseAngleClock.java
@@ -24,6 +24,9 @@
import com.powsybl.triplestore.api.PropertyBags;
import com.powsybl.triplestore.api.TripleStore;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* @author Luma Zamarreño {@literal }
* @author José Antonio Marqués {@literal }
@@ -48,16 +51,21 @@ public void process(Network network, TripleStore tripleStore) {
LOG.warn("PhaseAngleClock-PostProcessor: Unexpected null cgmesModel pointer");
return;
}
-
- cgmes.groupedTransformerEnds().forEach((t, ends) -> {
- if (ends.size() == 2) {
- phaseAngleClockTwoWindingTransformer(ends, network);
- } else if (ends.size() == 3) {
- phaseAngleClockThreeWindingTransformer(ends, network);
- } else {
- throw new PowsyblException(String.format("Unexpected TransformerEnds: ends %d", ends.size()));
- }
- });
+ Map groupedTransformerEnds = new HashMap<>();
+ cgmes.transformerEnds()
+ .forEach(p -> groupedTransformerEnds
+ .computeIfAbsent(p.getId("PowerTransformer"), b -> new PropertyBags())
+ .add(p));
+ groupedTransformerEnds.values()
+ .forEach(ends -> {
+ if (ends.size() == 2) {
+ phaseAngleClockTwoWindingTransformer(ends, network);
+ } else if (ends.size() == 3) {
+ phaseAngleClockThreeWindingTransformer(ends, network);
+ } else {
+ throw new PowsyblException(String.format("Unexpected TransformerEnds: ends %d", ends.size()));
+ }
+ });
}
private void phaseAngleClockTwoWindingTransformer(PropertyBags ends, Network network) {
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/ShuntConversion.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/ShuntConversion.java
index 826bfcdbdf0..39b14cebdb1 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/ShuntConversion.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/ShuntConversion.java
@@ -61,7 +61,7 @@ public void convert() {
.add();
} else if ("NonlinearShuntCompensator".equals(shuntType)) {
ShuntCompensatorNonLinearModelAdder modelAdder = adder.newNonLinearModel();
- PropertyBags ss = context.cgmes().nonlinearShuntCompensatorPoints(id);
+ PropertyBags ss = context.nonlinearShuntCompensatorPoints(id);
ss.stream()
.filter(s -> s.asInt(SECTION_NUMBER) > 0)
.sorted(Comparator.comparing(s -> s.asInt(SECTION_NUMBER)))
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/Adjacency.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/Adjacency.java
index d7d60448a7b..4a58d8a67c1 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/Adjacency.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/Adjacency.java
@@ -15,6 +15,7 @@
import java.util.Map;
import java.util.Objects;
+import com.powsybl.cgmes.conversion.Context;
import com.powsybl.cgmes.model.CgmesDcTerminal;
import com.powsybl.cgmes.model.CgmesModel;
import com.powsybl.cgmes.model.CgmesNames;
@@ -36,7 +37,7 @@ enum AdjacentType {
private final Map> adjacency;
- Adjacency(CgmesModel cgmesModel, AcDcConverterNodes acDcConverterNodes) {
+ Adjacency(CgmesModel cgmesModel, Context context, AcDcConverterNodes acDcConverterNodes) {
adjacency = new HashMap<>();
cgmesModel.dcLineSegments().forEach(dcls -> computeDcLineSegmentAdjacency(cgmesModel, dcls));
@@ -44,15 +45,17 @@ enum AdjacentType {
.forEach((key, value) -> computeAcDcConverterAdjacency(value.acNode,
value.dcNode));
- cgmesModel.groupedTransformerEnds().forEach((t, ends) -> {
- if (ends.size() == 2) {
- computeTwoWindingsTransformerAdjacency(cgmesModel, ends);
- } else if (ends.size() == 3) {
- computeThreeWindingsTransformerAdjacency(cgmesModel, ends);
- } else {
- throw new PowsyblException(String.format("Unexpected TransformerEnds: ends %d", ends.size()));
- }
- });
+ cgmesModel.transformers().stream()
+ .map(t -> context.transformerEnds(t.getId("PowerTransformer")))
+ .forEach(ends -> {
+ if (ends.size() == 2) {
+ computeTwoWindingsTransformerAdjacency(cgmesModel, ends);
+ } else if (ends.size() == 3) {
+ computeThreeWindingsTransformerAdjacency(cgmesModel, ends);
+ } else {
+ throw new PowsyblException(String.format("Unexpected TransformerEnds: ends %d", ends.size()));
+ }
+ });
}
private void computeDcLineSegmentAdjacency(CgmesModel cgmesModel, PropertyBag equipment) {
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/CgmesDcConversion.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/CgmesDcConversion.java
index db01fc7178c..5bb52f24a05 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/CgmesDcConversion.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/CgmesDcConversion.java
@@ -51,11 +51,11 @@ public void convert() {
// Get hvdc configurations
AcDcConverterNodes acDcConverterNodes = new AcDcConverterNodes(cgmesModel);
- Adjacency adjacency = new Adjacency(cgmesModel, acDcConverterNodes);
+ Adjacency adjacency = new Adjacency(cgmesModel, context, acDcConverterNodes);
if (adjacency.isEmpty()) {
return;
}
- NodeEquipment nodeEquipment = new NodeEquipment(cgmesModel, acDcConverterNodes, adjacency);
+ NodeEquipment nodeEquipment = new NodeEquipment(cgmesModel, context, acDcConverterNodes, adjacency);
Islands islands = new Islands(adjacency);
IslandsEnds islandsEnds = new IslandsEnds();
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/NodeEquipment.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/NodeEquipment.java
index c0db811141b..4cea45b77d3 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/NodeEquipment.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/hvdc/NodeEquipment.java
@@ -11,6 +11,7 @@
import java.util.*;
import java.util.stream.Collectors;
+import com.powsybl.cgmes.conversion.Context;
import com.powsybl.cgmes.model.CgmesDcTerminal;
import com.powsybl.cgmes.model.CgmesModel;
import com.powsybl.cgmes.model.CgmesNames;
@@ -31,7 +32,7 @@ enum EquipmentType {
private final Map> nodeEquipment;
- NodeEquipment(CgmesModel cgmesModel, AcDcConverterNodes acDcConverterNodes, Adjacency adjacency) {
+ NodeEquipment(CgmesModel cgmesModel, Context context, AcDcConverterNodes acDcConverterNodes, Adjacency adjacency) {
nodeEquipment = new HashMap<>();
cgmesModel.dcLineSegments().forEach(dcls -> computeDcLineSegment(cgmesModel, adjacency, dcls));
@@ -40,13 +41,15 @@ enum EquipmentType {
.forEach(value -> addEquipment(adjacency, value.id, value.acNode,
value.dcNode, EquipmentType.AC_DC_CONVERTER));
- cgmesModel.groupedTransformerEnds().forEach((t, ends) -> {
- if (ends.size() == 2) {
- computeTwoWindingsTransformer(cgmesModel, adjacency, ends);
- } else if (ends.size() == 3) {
- computeThreeWindingsTransformer(cgmesModel, adjacency, ends);
- }
- });
+ cgmesModel.transformers().stream()
+ .map(t -> context.transformerEnds(t.getId("PowerTransformer")))
+ .forEach(ends -> {
+ if (ends.size() == 2) {
+ computeTwoWindingsTransformer(cgmesModel, adjacency, ends);
+ } else if (ends.size() == 3) {
+ computeThreeWindingsTransformer(cgmesModel, adjacency, ends);
+ }
+ });
}
private void computeDcLineSegment(CgmesModel cgmesModel, Adjacency adjacency, PropertyBag equipment) {
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/AbstractTransformerConversion.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/AbstractTransformerConversion.java
index 2f6a272dba5..6826bf753c7 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/AbstractTransformerConversion.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/AbstractTransformerConversion.java
@@ -9,20 +9,18 @@
package com.powsybl.cgmes.conversion.elements.transformers;
import com.powsybl.cgmes.conversion.Context;
-import com.powsybl.cgmes.conversion.Conversion;
import com.powsybl.cgmes.conversion.RegulatingControlMappingForTransformers.CgmesRegulatingControlPhase;
import com.powsybl.cgmes.conversion.RegulatingControlMappingForTransformers.CgmesRegulatingControlRatio;
import com.powsybl.cgmes.conversion.elements.AbstractConductingEquipmentConversion;
import com.powsybl.cgmes.extensions.CgmesTapChangers;
import com.powsybl.cgmes.extensions.CgmesTapChangersAdder;
-import com.powsybl.cgmes.model.CgmesNames;
import com.powsybl.cgmes.model.WindingType;
import com.powsybl.iidm.network.*;
import com.powsybl.triplestore.api.PropertyBag;
import com.powsybl.triplestore.api.PropertyBags;
-import java.util.List;
-import java.util.Optional;
+import static com.powsybl.cgmes.conversion.Conversion.CGMES_PREFIX_ALIAS_PROPERTIES;
+import static com.powsybl.cgmes.model.CgmesNames.*;
/**
* @author Luma Zamarreño {@literal }
@@ -111,23 +109,30 @@ protected CgmesRegulatingControlPhase setContextRegulatingDataPhase(TapChanger t
@Override
protected void addAliasesAndProperties(Identifiable> identifiable) {
+ // Add PowerTransformer aliases
super.addAliasesAndProperties(identifiable);
- for (PropertyBag p : ps) {
- identifiable.addAlias(p.getId("TransformerEnd"), Conversion.CGMES_PREFIX_ALIAS_PROPERTIES + CgmesNames.TRANSFORMER_END + WindingType.endNumber(p));
+
+ // Add PowerTransformerEnds aliases
+ String alias;
+ String aliasType;
+ for (PropertyBag end : ps) {
+ alias = end.getId("TransformerEnd");
+ aliasType = CGMES_PREFIX_ALIAS_PROPERTIES + TRANSFORMER_END + WindingType.endNumber(end);
+ identifiable.addAlias(alias, aliasType);
}
- List ptcs = context.cgmes().phaseTapChangerListForPowerTransformer(identifiable.getId());
- if (ptcs != null) {
- for (int i = 0; i < ptcs.size(); i++) {
- int index = i + 1;
- Optional.ofNullable(ptcs.get(i)).ifPresent(ptc -> identifiable.addAlias(ptc, Conversion.CGMES_PREFIX_ALIAS_PROPERTIES + CgmesNames.PHASE_TAP_CHANGER + index, context.config().isEnsureIdAliasUnicity()));
- }
+
+ // Add RatioTapChangers aliases
+ for (PropertyBag rtc : context.ratioTapChangers(identifiable.getId())) {
+ alias = rtc.getId("RatioTapChanger");
+ aliasType = CGMES_PREFIX_ALIAS_PROPERTIES + RATIO_TAP_CHANGER + WindingType.endNumber(rtc);
+ identifiable.addAlias(alias, aliasType, context.config().isEnsureIdAliasUnicity());
}
- List rtcs = context.cgmes().ratioTapChangerListForPowerTransformer(identifiable.getId());
- if (rtcs != null) {
- for (int i = 0; i < rtcs.size(); i++) {
- int index = i + 1;
- Optional.ofNullable(rtcs.get(i)).ifPresent(rtc -> identifiable.addAlias(rtc, Conversion.CGMES_PREFIX_ALIAS_PROPERTIES + CgmesNames.RATIO_TAP_CHANGER + index, context.config().isEnsureIdAliasUnicity()));
- }
+
+ // Add PhaseTapChangers aliases
+ for (PropertyBag ptc : context.phaseTapChangers(identifiable.getId())) {
+ alias = ptc.getId("PhaseTapChanger");
+ aliasType = CGMES_PREFIX_ALIAS_PROPERTIES + PHASE_TAP_CHANGER + WindingType.endNumber(ptc);
+ identifiable.addAlias(alias, aliasType, context.config().isEnsureIdAliasUnicity());
}
}
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/CgmesPhaseTapChangerBuilder.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/CgmesPhaseTapChangerBuilder.java
index f016da66ba3..0ea1111ee49 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/CgmesPhaseTapChangerBuilder.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/CgmesPhaseTapChangerBuilder.java
@@ -70,13 +70,13 @@ protected void addSteps() {
if (isLinear()) {
addStepsLinear();
} else if (isTabular()) {
- PropertyBags table = context.phaseTapChangerTable(tableId);
- if (table == null) {
+ PropertyBags tablePoints = context.phaseTapChangerTablePoints(tableId);
+ if (tablePoints.isEmpty()) {
addStepsLinear();
return;
}
- if (isTableValid(tableId, table)) {
- addStepsFromTable(table);
+ if (isTableValid(tableId, tablePoints)) {
+ addStepsFromTable(tablePoints);
} else {
addStepsLinear();
}
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/CgmesRatioTapChangerBuilder.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/CgmesRatioTapChangerBuilder.java
index 459ee8b82c0..84d588e82f8 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/CgmesRatioTapChangerBuilder.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/CgmesRatioTapChangerBuilder.java
@@ -40,13 +40,13 @@ protected void addRegulationData() {
protected void addSteps() {
String tableId = p.getId(CgmesNames.RATIO_TAP_CHANGER_TABLE);
if (tableId != null) {
- PropertyBags table = context.ratioTapChangerTable(tableId);
- if (table == null) {
+ PropertyBags tablePoints = context.ratioTapChangerTablePoints(tableId);
+ if (tablePoints.isEmpty()) {
addStepsFromLowHighIncrement();
return;
}
- if (isTableValid(tableId, table)) {
- addStepsFromTable(table, tableId);
+ if (isTableValid(tableId, tablePoints)) {
+ addStepsFromTable(tablePoints, tableId);
} else {
addStepsFromLowHighIncrement();
}
diff --git a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/TapChanger.java b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/TapChanger.java
index c5bddf02320..ac52fb7ced9 100644
--- a/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/TapChanger.java
+++ b/cgmes/cgmes-conversion/src/main/java/com/powsybl/cgmes/conversion/elements/transformers/TapChanger.java
@@ -25,14 +25,24 @@ public class TapChanger {
public static TapChanger ratioTapChangerFromEnd(PropertyBag end, Context context) {
Objects.requireNonNull(end);
Objects.requireNonNull(context);
- PropertyBag rtc = context.ratioTapChanger(end.getId(CgmesNames.RATIO_TAP_CHANGER));
+ PropertyBag rtc = context
+ .ratioTapChangers(end.getId("PowerTransformer"))
+ .stream()
+ .filter(tc -> end.getId(CgmesNames.TRANSFORMER_END).equals(tc.getId(CgmesNames.TRANSFORMER_END)))
+ .findFirst()
+ .orElse(null);
return rtc != null ? AbstractCgmesTapChangerBuilder.newRatioTapChanger(rtc, context).build() : null;
}
public static TapChanger phaseTapChangerFromEnd(PropertyBag end, double x, Context context) {
Objects.requireNonNull(end);
Objects.requireNonNull(context);
- PropertyBag ptc = context.phaseTapChanger(end.getId(CgmesNames.PHASE_TAP_CHANGER));
+ PropertyBag ptc = context
+ .phaseTapChangers(end.getId("PowerTransformer"))
+ .stream()
+ .filter(tc -> end.getId(CgmesNames.TRANSFORMER_END).equals(tc.getId(CgmesNames.TRANSFORMER_END)))
+ .findFirst()
+ .orElse(null);
return ptc != null ? AbstractCgmesTapChangerBuilder.newPhaseTapChanger(ptc, x, context).build() : null;
}
diff --git a/cgmes/cgmes-conversion/src/test/java/com/powsybl/cgmes/conversion/test/FakeTapChangerConversionTest.java b/cgmes/cgmes-conversion/src/test/java/com/powsybl/cgmes/conversion/test/FakeTapChangerConversionTest.java
deleted file mode 100644
index c8b0838fbc2..00000000000
--- a/cgmes/cgmes-conversion/src/test/java/com/powsybl/cgmes/conversion/test/FakeTapChangerConversionTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * 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/.
- * SPDX-License-Identifier: MPL-2.0
- */
-package com.powsybl.cgmes.conversion.test;
-
-import com.powsybl.cgmes.model.CgmesModel;
-import com.powsybl.cgmes.model.InMemoryCgmesModel;
-import org.junit.jupiter.api.Test;
-
-import java.util.Collections;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-/**
- * @author Luma Zamarreño {@literal }
- */
-class FakeTapChangerConversionTest {
- @Test
- void fakeTapChangersEmpty() {
- CgmesModel cgmes = new InMemoryCgmesModel();
- assertEquals(Collections.emptyList(), cgmes.ratioTapChangerListForPowerTransformer("anyTransformer"));
- assertEquals(Collections.emptyList(), cgmes.phaseTapChangerListForPowerTransformer("anyTransformer"));
- }
-}
diff --git a/cgmes/cgmes-conversion/src/test/resources/functional-logs/microGridBaseCaseBE-target-deadband.txt b/cgmes/cgmes-conversion/src/test/resources/functional-logs/microGridBaseCaseBE-target-deadband.txt
index d81410a9eda..cbe6753dbf4 100644
--- a/cgmes/cgmes-conversion/src/test/resources/functional-logs/microGridBaseCaseBE-target-deadband.txt
+++ b/cgmes/cgmes-conversion/src/test/resources/functional-logs/microGridBaseCaseBE-target-deadband.txt
@@ -33,9 +33,9 @@
Converting SvInjection.
Converting ControlArea.
+ Converting RegulatingControl.
+ Equipment 6ebbef67-3061-4236-a6fd-6ccc4595f6c3 has a regulating control with bad target deadband: -35.0.
Equipment 955d9cd0-4a10-4031-b008-60c0dc340a07 has a regulating control with bad target value for voltage: 0.0.
Equipment 955d9cd0-4a10-4031-b008-60c0dc340a07 has a regulating control with bad target deadband: -0.5.
- Equipment 6ebbef67-3061-4236-a6fd-6ccc4595f6c3 has a regulating control with bad target deadband: -35.0.
Equipment fe25f43a-7341-446e-a71a-8ab7119ba806 has a regulating control with bad target value for voltage: 0.0.
Fixing issues with dangling lines.
Setting voltages and angles.
diff --git a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/AbstractCgmesModel.java b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/AbstractCgmesModel.java
index bc0063c1ddf..a7a00605fe6 100644
--- a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/AbstractCgmesModel.java
+++ b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/AbstractCgmesModel.java
@@ -35,22 +35,6 @@ public Properties getProperties() {
return this.properties;
}
- @Override
- public PropertyBags nonlinearShuntCompensatorPoints(String shuntId) {
- if (cachedGroupedShuntCompensatorPoints == null) {
- cachedGroupedShuntCompensatorPoints = computeGroupedShuntCompensatorPoints();
- }
- return cachedGroupedShuntCompensatorPoints.getOrDefault(shuntId, new PropertyBags());
- }
-
- @Override
- public Map groupedTransformerEnds() {
- if (cachedGroupedTransformerEnds == null) {
- cachedGroupedTransformerEnds = computeGroupedTransformerEnds();
- }
- return cachedGroupedTransformerEnds;
- }
-
@Override
public Collection computedTerminals() {
if (cachedTerminals == null) {
@@ -75,16 +59,6 @@ public CgmesDcTerminal dcTerminal(String dcTerminalId) {
return cachedDcTerminals.get(dcTerminalId);
}
- @Override
- public List ratioTapChangerListForPowerTransformer(String powerTransformerId) {
- return powerTransformerRatioTapChanger.get(powerTransformerId) == null ? null : Arrays.asList(powerTransformerRatioTapChanger.get(powerTransformerId));
- }
-
- @Override
- public List phaseTapChangerListForPowerTransformer(String powerTransformerId) {
- return powerTransformerPhaseTapChanger.get(powerTransformerId) == null ? null : Arrays.asList(powerTransformerPhaseTapChanger.get(powerTransformerId));
- }
-
@Override
public String substation(CgmesTerminal t, boolean nodeBreaker) {
CgmesContainer c = container(t, nodeBreaker);
@@ -168,43 +142,6 @@ private CgmesContainer container(CgmesTerminal t, boolean nodeBreaker) {
return (containerId == null) ? null : container(containerId);
}
- private Map computeGroupedShuntCompensatorPoints() {
- Map groupedShuntCompensatorPoints = new HashMap<>();
- nonlinearShuntCompensatorPoints()
- .forEach(point -> {
- String shuntCompensator = point.getId("Shunt");
- groupedShuntCompensatorPoints.computeIfAbsent(shuntCompensator, bag -> new PropertyBags())
- .add(point);
- });
- return groupedShuntCompensatorPoints;
- }
-
- private Map computeGroupedTransformerEnds() {
- // Alternative implementation:
- // instead of sorting after building each list,
- // use a sorted collection when inserting
- String endNumber = "endNumber";
- Map gends = new HashMap<>();
- powerTransformerRatioTapChanger = new HashMap<>();
- powerTransformerPhaseTapChanger = new HashMap<>();
- transformerEnds()
- .forEach(end -> {
- String id = end.getId("PowerTransformer");
- PropertyBags ends = gends.computeIfAbsent(id, x -> new PropertyBags());
- ends.add(end);
- if (end.getId("PhaseTapChanger") != null) {
- powerTransformerPhaseTapChanger.computeIfAbsent(id, s -> new String[3]);
- powerTransformerPhaseTapChanger.get(id)[end.asInt(endNumber, 1) - 1] = end.getId("PhaseTapChanger");
- }
- if (end.getId("RatioTapChanger") != null) {
- powerTransformerRatioTapChanger.computeIfAbsent(id, s -> new String[3]);
- powerTransformerRatioTapChanger.get(id)[end.asInt(endNumber, 1) - 1] = end.getId("RatioTapChanger");
- }
- });
- gends.values().forEach(tends -> tends.sort(Comparator.comparing(WindingType::endNumber)));
- return gends;
- }
-
protected void cacheNodes() {
if (!cachedNodes) {
cachedConnectivityNodes = connectivityNodes();
@@ -300,10 +237,6 @@ public void read(ReadOnlyDataSource ds, ReportNode reportNode) {
}
protected void invalidateCaches() {
- cachedGroupedShuntCompensatorPoints = null;
- cachedGroupedTransformerEnds = null;
- powerTransformerRatioTapChanger = null;
- powerTransformerPhaseTapChanger = null;
cachedTerminals = null;
cachedContainers = null;
cachedBaseVoltages = null;
@@ -318,8 +251,6 @@ protected void invalidateCaches() {
private String baseName;
// Caches
- private Map cachedGroupedShuntCompensatorPoints;
- private Map cachedGroupedTransformerEnds;
private Map cachedTerminals;
private Map cachedContainers;
private Map cachedBaseVoltages;
@@ -328,8 +259,6 @@ protected void invalidateCaches() {
protected PropertyBags cachedTopologicalNodes;
private Map cachedNodesById;
// equipmentId, sequenceNumber, terminalId
- private Map powerTransformerRatioTapChanger;
- private Map powerTransformerPhaseTapChanger;
private Map cachedDcTerminals;
private static final Logger LOG = LoggerFactory.getLogger(AbstractCgmesModel.class);
diff --git a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/CgmesModel.java b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/CgmesModel.java
index 0f1bb6928b4..c3f38d2e44b 100644
--- a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/CgmesModel.java
+++ b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/CgmesModel.java
@@ -92,13 +92,14 @@ default PropertyBags fullModels() {
PropertyBags transformerEnds();
- // Transformer ends grouped by transformer
- Map groupedTransformerEnds();
-
PropertyBags ratioTapChangers();
+ PropertyBags ratioTapChangerTablePoints();
+
PropertyBags phaseTapChangers();
+ PropertyBags phaseTapChangerTablePoints();
+
PropertyBags regulatingControls();
PropertyBags energyConsumers();
@@ -111,17 +112,11 @@ default PropertyBags fullModels() {
/**
* Query all NonlinearShuntCompensatorPoint in the CgmesModel.
+ *
* @return A {@link PropertyBags} with the shunt compensators points properties.
*/
PropertyBags nonlinearShuntCompensatorPoints();
- /**
- * Query the NonlinearShuntCompensatorPoint associated to the given NonlinearShuntCompensator.
- * @param shuntId The id of the NonlinearShuntCompensator.
- * @return A {@link PropertyBags} with the given shunt compensator's points properties.
- */
- PropertyBags nonlinearShuntCompensatorPoints(String shuntId);
-
PropertyBags staticVarCompensators();
/**
@@ -157,14 +152,6 @@ default PropertyBags synchronousMachinesAll() {
PropertyBags reactiveCapabilityCurveData();
- PropertyBags ratioTapChangerTablesPoints();
-
- PropertyBags phaseTapChangerTablesPoints();
-
- PropertyBags ratioTapChangerTable(String tableId);
-
- PropertyBags phaseTapChangerTable(String tableId);
-
PropertyBags controlAreas();
PropertyBags acDcConverters();
@@ -225,10 +212,6 @@ default void write(DataSource ds, CgmesSubset subset) {
// Helper mappings
- List ratioTapChangerListForPowerTransformer(String powerTransformerId);
-
- List phaseTapChangerListForPowerTransformer(String powerTransformerId);
-
/**
* Obtain the substation of a given terminal.
*
diff --git a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/CgmesModelFactory.java b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/CgmesModelFactory.java
index 245aed96f37..f4c8f2bbd2d 100644
--- a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/CgmesModelFactory.java
+++ b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/CgmesModelFactory.java
@@ -100,15 +100,13 @@ public static CgmesModel copy(CgmesModel cgmes) {
private static void buildCaches(CgmesModel cgmes) {
// TODO This is rebuilding only some caches
boolean isNodeBreaker = cgmes.isNodeBreaker();
- for (PropertyBags tends : cgmes.groupedTransformerEnds().values()) {
- for (PropertyBag end : tends) {
- CgmesTerminal t = cgmes.terminal(end.getId(CgmesNames.TERMINAL));
- cgmes.substation(t, isNodeBreaker);
- if (isNodeBreaker) {
- t.connectivityNode();
- } else {
- t.topologicalNode();
- }
+ for (PropertyBag end : cgmes.transformerEnds()) {
+ CgmesTerminal t = cgmes.terminal(end.getId(CgmesNames.TERMINAL));
+ cgmes.substation(t, isNodeBreaker);
+ if (isNodeBreaker) {
+ t.connectivityNode();
+ } else {
+ t.topologicalNode();
}
}
}
diff --git a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/InMemoryCgmesModel.java b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/InMemoryCgmesModel.java
index 17f9d4844ec..fc2760ec879 100644
--- a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/InMemoryCgmesModel.java
+++ b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/InMemoryCgmesModel.java
@@ -402,14 +402,14 @@ public PropertyBags transformerEnds() {
}
@Override
- public Map groupedTransformerEnds() {
- // FakeCgmesModeldoes not provide grouped transformer ends
- return Collections.emptyMap();
+ public PropertyBags ratioTapChangers() {
+ return ratioTapChangers;
}
@Override
- public PropertyBags ratioTapChangers() {
- return ratioTapChangers;
+ public PropertyBags ratioTapChangerTablePoints() {
+ // FakeCgmesModel does not implement ratio tap changer tables
+ return new PropertyBags();
}
@Override
@@ -417,6 +417,12 @@ public PropertyBags phaseTapChangers() {
return phaseTapChangers;
}
+ @Override
+ public PropertyBags phaseTapChangerTablePoints() {
+ // FakeCgmesModel does not implement phase tap changer tables
+ return new PropertyBags();
+ }
+
@Override
public PropertyBags regulatingControls() {
return regulatingControls;
@@ -442,12 +448,6 @@ public PropertyBags nonlinearShuntCompensatorPoints() {
return shuntCompensatorPoints;
}
- @Override
- public PropertyBags nonlinearShuntCompensatorPoints(String shuntId) {
- // FakeCgmesModel does not provide grouped shunt compensator points
- return new PropertyBags();
- }
-
@Override
public PropertyBags equivalentShunts() {
return equivalentShunts;
@@ -494,40 +494,6 @@ public PropertyBags reactiveCapabilityCurveData() {
return new PropertyBags();
}
- @Override
- public PropertyBags ratioTapChangerTablesPoints() {
- // FakeCgmesModel does not implement ratio tap changer tables
- return new PropertyBags();
- }
-
- @Override
- public PropertyBags phaseTapChangerTablesPoints() {
- // FakeCgmesModel does not implement phase tap changer tables
- return new PropertyBags();
- }
-
- @Override
- public PropertyBags ratioTapChangerTable(String tableId) {
- // FakeCgmesModel does not implement ratio tap changer tables
- return new PropertyBags();
- }
-
- @Override
- public PropertyBags phaseTapChangerTable(String tableId) {
- // FakeCgmesModel does not implement phase tap changer tables
- return new PropertyBags();
- }
-
- @Override
- public List ratioTapChangerListForPowerTransformer(String powerTransformerId) {
- return Collections.emptyList();
- }
-
- @Override
- public List phaseTapChangerListForPowerTransformer(String powerTransformerId) {
- return Collections.emptyList();
- }
-
@Override
public PropertyBags acDcConverters() {
return acDcConverters;
diff --git a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/triplestore/CgmesModelTripleStore.java b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/triplestore/CgmesModelTripleStore.java
index 7915a17dfe8..6691196d6e4 100644
--- a/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/triplestore/CgmesModelTripleStore.java
+++ b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/triplestore/CgmesModelTripleStore.java
@@ -467,11 +467,21 @@ public PropertyBags ratioTapChangers() {
return namedQuery("ratioTapChangers");
}
+ @Override
+ public PropertyBags ratioTapChangerTablePoints() {
+ return namedQuery("ratioTapChangerTablePoints");
+ }
+
@Override
public PropertyBags phaseTapChangers() {
return namedQuery("phaseTapChangers");
}
+ @Override
+ public PropertyBags phaseTapChangerTablePoints() {
+ return namedQuery("phaseTapChangerTablePoints");
+ }
+
@Override
public PropertyBags regulatingControls() {
return namedQuery("regulatingControls");
@@ -542,28 +552,6 @@ public PropertyBags reactiveCapabilityCurveData() {
return namedQuery("reactiveCapabilityCurveData");
}
- @Override
- public PropertyBags ratioTapChangerTablesPoints() {
- return namedQuery("ratioTapChangerTablesPoints");
- }
-
- @Override
- public PropertyBags phaseTapChangerTablesPoints() {
- return namedQuery("phaseTapChangerTablesPoints");
- }
-
- @Override
- public PropertyBags ratioTapChangerTable(String tableId) {
- Objects.requireNonNull(tableId);
- return namedQuery("ratioTapChangerTable", tableId);
- }
-
- @Override
- public PropertyBags phaseTapChangerTable(String tableId) {
- Objects.requireNonNull(tableId);
- return namedQuery("phaseTapChangerTable", tableId);
- }
-
@Override
public PropertyBags controlAreas() {
return namedQuery("controlAreas");
diff --git a/cgmes/cgmes-model/src/main/resources/CIM14.sparql b/cgmes/cgmes-model/src/main/resources/CIM14.sparql
index 44ee184a271..6a215a9a9d6 100644
--- a/cgmes/cgmes-model/src/main/resources/CIM14.sparql
+++ b/cgmes/cgmes-model/src/main/resources/CIM14.sparql
@@ -226,11 +226,9 @@ WHERE {
cim:TransformerWinding.x ?x ;
cim:TransformerWinding.ratedU ?ratedU .
?Terminal cim:Terminal.ConductingEquipment ?TransformerWinding .
- OPTIONAL { ?RatioTapChanger cim:RatioTapChanger.TransformerWinding ?TransformerWinding }
- OPTIONAL { ?PhaseTapChanger cim:PhaseTapChanger.TransformerWinding ?TransformerWinding }
}}
BIND ( ?TransformerWinding AS ?TransformerEnd )
-}
+} ORDER BY ?PowerTransformer ?windingType
# query: ratioTapChangers
SELECT *
@@ -244,6 +242,10 @@ WHERE {
cim:TapChanger.neutralU ?neutralU ;
cim:TapChanger.stepVoltageIncrement ?stepVoltageIncrement ;
cim:RatioTapChanger.TransformerWinding ?TransformerWinding .
+ ?TransformerWinding
+ a cim:TransformerWinding ;
+ cim:TransformerWinding.windingType ?windingType ;
+ cim:TransformerWinding.MemberOf_PowerTransformer ?PowerTransformer .
?Terminal cim:Terminal.ConductingEquipment ?TransformerWinding .
OPTIONAL { ?RatioTapChanger cim:TapChanger.RegulatingControl ?TapChangerControl }
}}
@@ -268,7 +270,11 @@ WHERE {
cim:TapChanger.neutralU ?neutralU ;
cim:PhaseTapChanger.phaseTapChangerType ?phaseTapChangerType ;
cim:PhaseTapChanger.TransformerWinding ?TransformerWinding .
- ?TransformerWinding cim:TransformerWinding.ratedU ?transformerWindingRatedU .
+ ?TransformerWinding
+ a cim:TransformerWinding ;
+ cim:TransformerWinding.ratedU ?transformerWindingRatedU ;
+ cim:TransformerWinding.windingType ?windingType ;
+ cim:TransformerWinding.MemberOf_PowerTransformer ?PowerTransformer .
?Terminal cim:Terminal.ConductingEquipment ?TransformerWinding .
OPTIONAL { ?PhaseTapChanger cim:PhaseTapChanger.voltageStepIncrementOutOfPhase ?voltageStepIncrementOutOfPhase }
OPTIONAL { ?PhaseTapChanger cim:TapChanger.stepVoltageIncrement ?voltageStepIncrement }
diff --git a/cgmes/cgmes-model/src/main/resources/CIM16.sparql b/cgmes/cgmes-model/src/main/resources/CIM16.sparql
index c137be21da9..ac370cc162a 100644
--- a/cgmes/cgmes-model/src/main/resources/CIM16.sparql
+++ b/cgmes/cgmes-model/src/main/resources/CIM16.sparql
@@ -559,10 +559,8 @@ WHERE {
OPTIONAL { ?TransformerEnd cim:PowerTransformerEnd.phaseAngleClock ?phaseAngleClock }
OPTIONAL { ?TransformerEnd cim:PowerTransformerEnd.g ?g }
OPTIONAL { ?TransformerEnd cim:PowerTransformerEnd.ratedS ?ratedS }
- OPTIONAL { ?RatioTapChanger cim:RatioTapChanger.TransformerEnd ?TransformerEnd }
- OPTIONAL { ?PhaseTapChanger cim:PhaseTapChanger.TransformerEnd ?TransformerEnd }
}}
-}
+} ORDER BY ?PowerTransformer ?endNumber
# query: ratioTapChangers
SELECT *
@@ -579,6 +577,10 @@ WHERE {
cim:RatioTapChanger.stepVoltageIncrement ?stepVoltageIncrement ;
cim:TapChanger.ltcFlag ?ltcFlag ;
cim:RatioTapChanger.TransformerEnd ?TransformerEnd .
+ ?TransformerEnd
+ a cim:PowerTransformerEnd ;
+ cim:TransformerEnd.endNumber ?endNumber ;
+ cim:PowerTransformerEnd.PowerTransformer ?PowerTransformer .
OPTIONAL {
?RatioTapChanger cim:TapChanger.TapChangerControl ?TapChangerControl .
OPTIONAL {
@@ -602,22 +604,7 @@ OPTIONAL { GRAPH ?graphSV {
}}
}
-# query: ratioTapChangerTable
-SELECT *
-WHERE {
- ?RatioTapChangerTablePoint
- a cim:RatioTapChangerTablePoint ;
- cim:RatioTapChangerTablePoint.RatioTapChangerTable ?Table ;
- cim:TapChangerTablePoint.step ?step .
- FILTER regex(str(?Table), "{0}")
- OPTIONAL { ?RatioTapChangerTablePoint cim:TapChangerTablePoint.ratio ?ratio }
- OPTIONAL { ?RatioTapChangerTablePoint cim:TapChangerTablePoint.r ?r }
- OPTIONAL { ?RatioTapChangerTablePoint cim:TapChangerTablePoint.x ?x }
- OPTIONAL { ?RatioTapChangerTablePoint cim:TapChangerTablePoint.g ?g }
- OPTIONAL { ?RatioTapChangerTablePoint cim:TapChangerTablePoint.b ?b }
-}
-
-# query: ratioTapChangerTablesPoints
+# query: ratioTapChangerTablePoints
SELECT *
WHERE {
?RatioTapChangerTablePoint
@@ -647,6 +634,8 @@ WHERE {
cim:PhaseTapChanger.TransformerEnd ?TransformerEnd .
?TransformerEnd
a cim:PowerTransformerEnd ;
+ cim:TransformerEnd.endNumber ?endNumber ;
+ cim:PowerTransformerEnd.PowerTransformer ?PowerTransformer ;
cim:PowerTransformerEnd.ratedU ?transformerWindingRatedU .
OPTIONAL {
?PhaseTapChanger
@@ -686,23 +675,7 @@ OPTIONAL { GRAPH ?graphSV {
}}
}
-# query: phaseTapChangerTable
-SELECT *
-WHERE {
- ?PhaseTapChangerTablePoint
- a cim:PhaseTapChangerTablePoint ;
- cim:PhaseTapChangerTablePoint.PhaseTapChangerTable ?Table ;
- cim:PhaseTapChangerTablePoint.angle ?angle ;
- cim:TapChangerTablePoint.step ?step .
- FILTER regex(str(?Table), "{0}")
- OPTIONAL { ?PhaseTapChangerTablePoint cim:TapChangerTablePoint.ratio ?ratio }
- OPTIONAL { ?PhaseTapChangerTablePoint cim:TapChangerTablePoint.r ?r }
- OPTIONAL { ?PhaseTapChangerTablePoint cim:TapChangerTablePoint.x ?x }
- OPTIONAL { ?PhaseTapChangerTablePoint cim:TapChangerTablePoint.g ?g }
- OPTIONAL { ?PhaseTapChangerTablePoint cim:TapChangerTablePoint.b ?b }
-}
-
-# query: phaseTapChangerTablesPoints
+# query: phaseTapChangerTablePoints
SELECT *
WHERE {
?PhaseTapChangerTablePoint
diff --git a/matpower/matpower-converter/src/test/resources/be.json b/matpower/matpower-converter/src/test/resources/be.json
index 48277fefbe3..5c12e76539b 100644
--- a/matpower/matpower-converter/src/test/resources/be.json
+++ b/matpower/matpower-converter/src/test/resources/be.json
@@ -257,15 +257,15 @@
"angMin" : 0.0,
"angMax" : 0.0
}, {
- "from" : 2,
- "to" : 1,
- "r" : 8.192122993395951E-4,
- "x" : 0.04571631170550064,
- "b" : -0.010613320515218202,
- "rateA" : 143.891,
+ "from" : 6,
+ "to" : 2,
+ "r" : 0.0016923075000000005,
+ "x" : 0.009074315000000001,
+ "b" : 0.0,
+ "rateA" : 356.516,
"rateB" : 0.0,
- "rateC" : 154.891,
- "ratio" : 1.0277920081967213,
+ "rateC" : 364.116,
+ "ratio" : 1.0526315789473684,
"phaseShiftAngle" : 0.0,
"status" : 1,
"angMin" : 0.0,
@@ -285,15 +285,15 @@
"angMin" : 0.0,
"angMax" : 0.0
}, {
- "from" : 6,
- "to" : 2,
- "r" : 0.0016923075000000005,
- "x" : 0.009074315000000001,
- "b" : 0.0,
- "rateA" : 356.516,
+ "from" : 2,
+ "to" : 1,
+ "r" : 8.192122993395951E-4,
+ "x" : 0.04571631170550064,
+ "b" : -0.010613320515218202,
+ "rateA" : 143.891,
"rateB" : 0.0,
- "rateC" : 364.116,
- "ratio" : 1.0526315789473684,
+ "rateC" : 154.891,
+ "ratio" : 1.0277920081967213,
"phaseShiftAngle" : 0.0,
"status" : 1,
"angMin" : 0.0,