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 21a0ed1ca49..140f8c24b57 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 @@ -57,8 +57,6 @@ 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<>(); } @@ -149,36 +147,6 @@ public PropertyBags reactiveCapabilityCurveData(String curveId) { return reactiveCapabilityCurveData.get(curveId); } - 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 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 ratioTapChangerTable(String tableId) { - return ratioTapChangerTables.get(tableId); - } - - public PropertyBags phaseTapChangerTable(String tableId) { - return phaseTapChangerTables.get(tableId); - } - // Handling issues found during conversion public ReportNode getReportNode() { @@ -287,8 +255,6 @@ 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 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 a1a1f85abe3..4738a7e038f 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,8 +472,6 @@ private Network createNetwork() { private Context createContext(Network network, ReportNode reportNode) { Context context = new Context(cgmes, config, network, reportNode); context.dc().initialize(); - context.loadRatioTapChangerTables(); - context.loadPhaseTapChangerTables(); context.loadReactiveCapabilityCurveData(); return context; } 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..52a41452a6e 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.cgmes().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..af4a2374048 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.cgmes().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-model/src/main/java/com/powsybl/cgmes/model/AbstractCgmesModel.java b/cgmes/cgmes-model/src/main/java/com/powsybl/cgmes/model/AbstractCgmesModel.java index f2eeaa3d1fb..bf7a776fd21 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 @@ -59,6 +59,14 @@ public PropertyBags ratioTapChangers(String transformerId) { return cachedGroupedRatioTapChangers.getOrDefault(transformerId, new PropertyBags()); } + @Override + public PropertyBags ratioTapChangerTablePoints(String tableId) { + if (cachedGroupedRatioTapChangerTablePoints == null) { + cachedGroupedRatioTapChangerTablePoints = computeGroupedRatioTapChangerTablePoints(); + } + return cachedGroupedRatioTapChangerTablePoints.getOrDefault(tableId, new PropertyBags()); + } + @Override public PropertyBags phaseTapChangers(String transformerId) { if (cachedGroupedPhaseTapChangers == null) { @@ -67,6 +75,14 @@ public PropertyBags phaseTapChangers(String transformerId) { return cachedGroupedPhaseTapChangers.getOrDefault(transformerId, new PropertyBags()); } + @Override + public PropertyBags phaseTapChangerTablePoints(String tableId) { + if (cachedGroupedPhaseTapChangerTablePoints == null) { + cachedGroupedPhaseTapChangerTablePoints = computeGroupedPhaseTapChangerTablePoints(); + } + return cachedGroupedPhaseTapChangerTablePoints.getOrDefault(tableId, new PropertyBags()); + } + @Override public Collection computedTerminals() { if (cachedTerminals == null) { @@ -207,6 +223,17 @@ private Map computeGroupedRatioTapChangers() { return groupedRatioTapChangers; } + private Map computeGroupedRatioTapChangerTablePoints() { + Map groupedRatioTapChangerTablePoints = new HashMap<>(); + ratioTapChangerTablePoints() + .forEach(point -> { + String tableId = point.getId("RatioTapChangerTable"); + groupedRatioTapChangerTablePoints.computeIfAbsent(tableId, bag -> new PropertyBags()) + .add(point); + }); + return groupedRatioTapChangerTablePoints; + } + private Map computeGroupedPhaseTapChangers() { Map groupedPhaseTapChangers = new HashMap<>(); phaseTapChangers() @@ -218,6 +245,17 @@ private Map computeGroupedPhaseTapChangers() { return groupedPhaseTapChangers; } + private Map computeGroupedPhaseTapChangerTablePoints() { + Map groupedPhaseTapChangerTablePoints = new HashMap<>(); + phaseTapChangerTablePoints() + .forEach(point -> { + String tableId = point.getId("PhaseTapChangerTable"); + groupedPhaseTapChangerTablePoints.computeIfAbsent(tableId, bag -> new PropertyBags()) + .add(point); + }); + return groupedPhaseTapChangerTablePoints; + } + protected void cacheNodes() { if (!cachedNodes) { cachedConnectivityNodes = connectivityNodes(); @@ -334,7 +372,9 @@ protected void invalidateCaches() { private Map cachedGroupedShuntCompensatorPoints; private Map cachedGroupedTransformerEnds; private Map cachedGroupedRatioTapChangers; + private Map cachedGroupedRatioTapChangerTablePoints; private Map cachedGroupedPhaseTapChangers; + private Map cachedGroupedPhaseTapChangerTablePoints; private Map cachedTerminals; private Map cachedContainers; private Map cachedBaseVoltages; 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 93f48e0a45c..0b7888cbede 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 @@ -98,10 +98,18 @@ default PropertyBags fullModels() { PropertyBags ratioTapChangers(String transformerId); + PropertyBags ratioTapChangerTablePoints(); + + PropertyBags ratioTapChangerTablePoints(String tableId); + PropertyBags phaseTapChangers(); PropertyBags phaseTapChangers(String transformerId); + PropertyBags phaseTapChangerTablePoints(); + + PropertyBags phaseTapChangerTablePoints(String tableId); + PropertyBags regulatingControls(); PropertyBags energyConsumers(); @@ -160,14 +168,6 @@ default PropertyBags synchronousMachinesAll() { PropertyBags reactiveCapabilityCurveData(); - PropertyBags ratioTapChangerTablesPoints(); - - PropertyBags phaseTapChangerTablesPoints(); - - PropertyBags ratioTapChangerTable(String tableId); - - PropertyBags phaseTapChangerTable(String tableId); - PropertyBags controlAreas(); PropertyBags acDcConverters(); 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 cfc7d799542..d6aa1b2a802 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 @@ -417,6 +417,18 @@ public PropertyBags ratioTapChangers(String transformerId) { return new PropertyBags(); } + @Override + public PropertyBags ratioTapChangerTablePoints() { + // FakeCgmesModel does not implement ratio tap changer tables + return new PropertyBags(); + } + + @Override + public PropertyBags ratioTapChangerTablePoints(String tableId) { + // FakeCgmesModel does not implement ratio tap changer tables + return new PropertyBags(); + } + @Override public PropertyBags phaseTapChangers() { return phaseTapChangers; @@ -427,6 +439,18 @@ public PropertyBags phaseTapChangers(String transformerId) { return new PropertyBags(); } + @Override + public PropertyBags phaseTapChangerTablePoints() { + // FakeCgmesModel does not implement phase tap changer tables + return new PropertyBags(); + } + + @Override + public PropertyBags phaseTapChangerTablePoints(String tableId) { + // FakeCgmesModel does not implement phase tap changer tables + return new PropertyBags(); + } + @Override public PropertyBags regulatingControls() { return regulatingControls; @@ -504,30 +528,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 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/CIM16.sparql b/cgmes/cgmes-model/src/main/resources/CIM16.sparql index 0b70d7fa8b0..9a9c99321fc 100644 --- a/cgmes/cgmes-model/src/main/resources/CIM16.sparql +++ b/cgmes/cgmes-model/src/main/resources/CIM16.sparql @@ -604,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 @@ -690,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