From 077dc10e6e2c4aeb7fd9fc6a1381720ad9c6454e Mon Sep 17 00:00:00 2001 From: Geoffroy Jamgotchian Date: Tue, 7 Apr 2026 13:35:06 +0200 Subject: [PATCH 1/4] Fix DGS import issue with BOM Signed-off-by: Geoffroy Jamgotchian --- .../main/java/com/powsybl/powerfactory/dgs/DgsParser.java | 8 +++----- .../java/com/powsybl/powerfactory/dgs/DgsDataTest.java | 5 +++++ .../powerfactory-dgs/src/test/resources/BOMTest.dgs | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 powerfactory/powerfactory-dgs/src/test/resources/BOMTest.dgs diff --git a/powerfactory/powerfactory-dgs/src/main/java/com/powsybl/powerfactory/dgs/DgsParser.java b/powerfactory/powerfactory-dgs/src/main/java/com/powsybl/powerfactory/dgs/DgsParser.java index ff61b2d85b9..450d0e79359 100644 --- a/powerfactory/powerfactory-dgs/src/main/java/com/powsybl/powerfactory/dgs/DgsParser.java +++ b/powerfactory/powerfactory-dgs/src/main/java/com/powsybl/powerfactory/dgs/DgsParser.java @@ -12,16 +12,14 @@ import com.powsybl.commons.PowsyblException; import com.powsybl.powerfactory.model.DataAttributeType; import com.powsybl.powerfactory.model.PowerFactoryException; +import org.apache.commons.io.input.BOMInputStream; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.math3.linear.BlockRealMatrix; import org.apache.commons.math3.linear.RealMatrix; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.Reader; -import java.io.UncheckedIOException; +import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -243,7 +241,7 @@ private static void readObjectTableRow(String trimmedLine, DgsHandler handler, P public void read(Reader reader, DgsHandler handler) { Objects.requireNonNull(reader); Objects.requireNonNull(handler); - try (BufferedReader bufferedReader = new BufferedReader(reader)) { + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(BOMInputStream.builder().setReader(reader).get()))) { String line; ParsingContext context = new ParsingContext(); while ((line = bufferedReader.readLine()) != null) { diff --git a/powerfactory/powerfactory-dgs/src/test/java/com/powsybl/powerfactory/dgs/DgsDataTest.java b/powerfactory/powerfactory-dgs/src/test/java/com/powsybl/powerfactory/dgs/DgsDataTest.java index 6915deafbdf..f0a163d866a 100644 --- a/powerfactory/powerfactory-dgs/src/test/java/com/powsybl/powerfactory/dgs/DgsDataTest.java +++ b/powerfactory/powerfactory-dgs/src/test/java/com/powsybl/powerfactory/dgs/DgsDataTest.java @@ -89,6 +89,11 @@ void missingElementInLineTest() { assertEquals("Not enough fields in the line: '1;Version'", exception.getMessage()); } + @Test + void bomTest() { + assertDoesNotThrow(() -> loadCase("/BOMTest.dgs")); + } + private boolean test(String dgs, String json) throws IOException { StudyCase studyCase = loadCase(dgs); String expectedJson = loadReference(json); diff --git a/powerfactory/powerfactory-dgs/src/test/resources/BOMTest.dgs b/powerfactory/powerfactory-dgs/src/test/resources/BOMTest.dgs new file mode 100644 index 00000000000..42fd20fe0e3 --- /dev/null +++ b/powerfactory/powerfactory-dgs/src/test/resources/BOMTest.dgs @@ -0,0 +1,2 @@ +$$General;ID(a:40);Descr(a:40);Val(a:40) + 1;Version;5.0 From 361e8c07ee406a396291bdc21e8a3f0f4e331a7d Mon Sep 17 00:00:00 2001 From: Geoffroy Jamgotchian Date: Tue, 7 Apr 2026 17:07:11 +0200 Subject: [PATCH 2/4] PowerFactory, fix missing curmg Signed-off-by: Geoffroy Jamgotchian --- .../powerfactory/converter/TransformerConverter.java | 3 +++ .../src/test/resources/CapabilityCurve.xiidm | 2 +- .../src/test/resources/Slack_bustp.xiidm | 2 +- .../src/test/resources/Slack_ip_ctrl.xiidm | 2 +- .../src/test/resources/Switches-missing-angle.xiidm | 2 +- .../src/test/resources/Switches-missing-voltage.xiidm | 2 +- .../src/test/resources/Switches-negative-voltage.xiidm | 2 +- .../src/test/resources/Switches-without-bus.xiidm | 2 +- .../src/test/resources/Switches.xiidm | 2 +- .../src/test/resources/ThreeMIB_T3W_phase_solved.xiidm | 4 ++-- .../src/test/resources/ThreeMIB_T3W_phase_winding1.xiidm | 8 ++++---- .../src/test/resources/ThreeMIB_T3W_phase_winding12.xiidm | 8 ++++---- .../resources/ThreeMIB_T3W_phase_winding1_complete.xiidm | 8 ++++---- .../resources/ThreeMIB_T3W_phase_winding1_ratio.xiidm | 8 ++++---- .../src/test/resources/ThreeMIB_T3W_phase_winding2.xiidm | 8 ++++---- .../src/test/resources/ThreeMIB_T3W_phase_winding3.xiidm | 8 ++++---- .../resources/ThreeWindingsTransformerWinding1Ratio.xiidm | 8 ++++---- .../resources/Transformer-Phase-Neutral-with-mTaps.xiidm | 2 +- .../src/test/resources/Transformer-Phase-Neutral.xiidm | 2 +- .../src/test/resources/Transformer-Phase-with-mTaps.xiidm | 2 +- .../src/test/resources/Transformer-Phase.xiidm | 2 +- .../src/test/resources/Transformer-VhVl-Non-Neutral.xiidm | 2 +- .../src/test/resources/Transformer-VhVl.xiidm | 2 +- .../src/test/resources/Transformer-VlVh-Non-Neutral.xiidm | 2 +- .../src/test/resources/Transformer-VlVh.xiidm | 2 +- .../test/resources/TransformersWithPhaseAngleClock.xiidm | 8 ++++---- .../src/test/resources/VoltageLevelsAndSubstations.xiidm | 2 +- .../src/test/resources/ieee14.xiidm | 6 +++--- 28 files changed, 57 insertions(+), 54 deletions(-) diff --git a/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java b/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java index b5dcf83e017..7dc7ff3cb37 100644 --- a/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java +++ b/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java @@ -288,6 +288,9 @@ private static Complex createImpedance(String uktrT, String pcutrT, DataObject t private static Complex createShuntAdmittance(String curmgT, String pfeT, DataObject typTr2, double ratedApparentPower, double nominalVoltage) { float curmg = typTr2.getFloatAttributeValue(curmgT); + if (curmg == 0) { + return Complex.ZERO; + } float pfe = typTr2.getFloatAttributeValue(pfeT); return createShuntAdmittanceFromMeasures(curmg, pfe, ratedApparentPower, nominalVoltage); diff --git a/powerfactory/powerfactory-converter/src/test/resources/CapabilityCurve.xiidm b/powerfactory/powerfactory-converter/src/test/resources/CapabilityCurve.xiidm index ba3fc32486a..2346853f78a 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/CapabilityCurve.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/CapabilityCurve.xiidm @@ -39,7 +39,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Slack_bustp.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Slack_bustp.xiidm index f11c9558921..acfe2b2a4d6 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Slack_bustp.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Slack_bustp.xiidm @@ -29,7 +29,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Slack_ip_ctrl.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Slack_ip_ctrl.xiidm index 1c3d00d35e6..d22f60f6151 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Slack_ip_ctrl.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Slack_ip_ctrl.xiidm @@ -29,7 +29,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Switches-missing-angle.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Switches-missing-angle.xiidm index 42b721446fc..4f327d42c22 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Switches-missing-angle.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Switches-missing-angle.xiidm @@ -32,7 +32,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Switches-missing-voltage.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Switches-missing-voltage.xiidm index eb2fabd5e11..26ee6d50041 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Switches-missing-voltage.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Switches-missing-voltage.xiidm @@ -32,7 +32,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Switches-negative-voltage.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Switches-negative-voltage.xiidm index ed8079ff6b8..f2710802225 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Switches-negative-voltage.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Switches-negative-voltage.xiidm @@ -32,7 +32,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Switches-without-bus.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Switches-without-bus.xiidm index c4215dbe9dd..73a76786c37 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Switches-without-bus.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Switches-without-bus.xiidm @@ -32,7 +32,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Switches.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Switches.xiidm index 8c2c91037cf..f702e3bbf3f 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Switches.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Switches.xiidm @@ -32,7 +32,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_solved.xiidm b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_solved.xiidm index cbb9e65d317..c259988db5a 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_solved.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_solved.xiidm @@ -39,7 +39,7 @@ - + @@ -100,7 +100,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1.xiidm b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1.xiidm index 5238e96e6d6..5c10f22bb89 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1.xiidm @@ -69,10 +69,10 @@ - - - - + + + + diff --git a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding12.xiidm b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding12.xiidm index cc2bc7288a8..e8e89f4ddad 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding12.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding12.xiidm @@ -69,10 +69,10 @@ - - - - + + + + diff --git a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1_complete.xiidm b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1_complete.xiidm index 535ebe4f4d4..e5beb4b8106 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1_complete.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1_complete.xiidm @@ -61,10 +61,10 @@ - - - - + + + + diff --git a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1_ratio.xiidm b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1_ratio.xiidm index f23f142ec32..cddc1bf5278 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1_ratio.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding1_ratio.xiidm @@ -69,10 +69,10 @@ - - - - + + + + diff --git a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding2.xiidm b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding2.xiidm index 1cb27cd6f70..2ac2a3327b3 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding2.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding2.xiidm @@ -69,10 +69,10 @@ - - - - + + + + diff --git a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding3.xiidm b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding3.xiidm index 9159a773b9b..9f2b0d3a817 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding3.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/ThreeMIB_T3W_phase_winding3.xiidm @@ -69,10 +69,10 @@ - - - - + + + + diff --git a/powerfactory/powerfactory-converter/src/test/resources/ThreeWindingsTransformerWinding1Ratio.xiidm b/powerfactory/powerfactory-converter/src/test/resources/ThreeWindingsTransformerWinding1Ratio.xiidm index ed4514555f1..f20fd4e543d 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/ThreeWindingsTransformerWinding1Ratio.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/ThreeWindingsTransformerWinding1Ratio.xiidm @@ -61,10 +61,10 @@ - - - - + + + + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-Neutral-with-mTaps.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-Neutral-with-mTaps.xiidm index feefc82ef28..313b891c4e3 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-Neutral-with-mTaps.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-Neutral-with-mTaps.xiidm @@ -29,7 +29,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-Neutral.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-Neutral.xiidm index 0cd288f4437..35523853956 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-Neutral.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-Neutral.xiidm @@ -29,7 +29,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-with-mTaps.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-with-mTaps.xiidm index 8c93a5a10ae..de1589383d1 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-with-mTaps.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase-with-mTaps.xiidm @@ -29,7 +29,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase.xiidm index 95add0087dc..58c65f22c06 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Transformer-Phase.xiidm @@ -29,7 +29,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Transformer-VhVl-Non-Neutral.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Transformer-VhVl-Non-Neutral.xiidm index c4685efcbf2..3df809fddca 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Transformer-VhVl-Non-Neutral.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Transformer-VhVl-Non-Neutral.xiidm @@ -31,7 +31,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Transformer-VhVl.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Transformer-VhVl.xiidm index 03ba206c375..d562227b92f 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Transformer-VhVl.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Transformer-VhVl.xiidm @@ -31,7 +31,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Transformer-VlVh-Non-Neutral.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Transformer-VlVh-Non-Neutral.xiidm index 1491447e630..306820e7678 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Transformer-VlVh-Non-Neutral.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Transformer-VlVh-Non-Neutral.xiidm @@ -31,7 +31,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/Transformer-VlVh.xiidm b/powerfactory/powerfactory-converter/src/test/resources/Transformer-VlVh.xiidm index c9a33741ee7..b3432b931da 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/Transformer-VlVh.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/Transformer-VlVh.xiidm @@ -31,7 +31,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/TransformersWithPhaseAngleClock.xiidm b/powerfactory/powerfactory-converter/src/test/resources/TransformersWithPhaseAngleClock.xiidm index 240873839fd..3b2e55d5804 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/TransformersWithPhaseAngleClock.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/TransformersWithPhaseAngleClock.xiidm @@ -61,10 +61,10 @@ - - - - + + + + diff --git a/powerfactory/powerfactory-converter/src/test/resources/VoltageLevelsAndSubstations.xiidm b/powerfactory/powerfactory-converter/src/test/resources/VoltageLevelsAndSubstations.xiidm index 14462ca1cec..9fca5fab9b3 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/VoltageLevelsAndSubstations.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/VoltageLevelsAndSubstations.xiidm @@ -31,7 +31,7 @@ - + diff --git a/powerfactory/powerfactory-converter/src/test/resources/ieee14.xiidm b/powerfactory/powerfactory-converter/src/test/resources/ieee14.xiidm index a0c5dba5913..be44c060d89 100644 --- a/powerfactory/powerfactory-converter/src/test/resources/ieee14.xiidm +++ b/powerfactory/powerfactory-converter/src/test/resources/ieee14.xiidm @@ -129,7 +129,7 @@ - + @@ -293,7 +293,7 @@ - + @@ -481,7 +481,7 @@ - + From 541badd479f10464927b35d9b6a835bfdb97d339 Mon Sep 17 00:00:00 2001 From: Geoffroy Jamgotchian Date: Tue, 7 Apr 2026 17:13:48 +0200 Subject: [PATCH 3/4] Wip Signed-off-by: Geoffroy Jamgotchian --- .../com/powsybl/powerfactory/converter/TransformerConverter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java b/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java index 7dc7ff3cb37..d4a9c8ba1e2 100644 --- a/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java +++ b/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java @@ -289,6 +289,7 @@ private static Complex createImpedance(String uktrT, String pcutrT, DataObject t private static Complex createShuntAdmittance(String curmgT, String pfeT, DataObject typTr2, double ratedApparentPower, double nominalVoltage) { float curmg = typTr2.getFloatAttributeValue(curmgT); if (curmg == 0) { + LOGGER.warn("curmg is zero"); return Complex.ZERO; } float pfe = typTr2.getFloatAttributeValue(pfeT); From e82739fb9b77948ce12fca0fad8c16ea82e08c7d Mon Sep 17 00:00:00 2001 From: Geoffroy Jamgotchian Date: Wed, 8 Apr 2026 09:29:03 +0200 Subject: [PATCH 4/4] Wip Signed-off-by: Geoffroy Jamgotchian --- .../converter/TransformerConverter.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java b/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java index d4a9c8ba1e2..7d1f97e8192 100644 --- a/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java +++ b/powerfactory/powerfactory-converter/src/main/java/com/powsybl/powerfactory/converter/TransformerConverter.java @@ -53,7 +53,7 @@ void createTwoWindings(DataObject elmTr2) { RatedModel ratedModel = RatedModel.create(typTr2, highAtEnd1); double nominalVoltageEnd2 = vl2.getNominalV(); - TransformerModel transformerModel = TransformerModel.create(typTr2, ratedModel.ratedS, nominalVoltageEnd2); + TransformerModel transformerModel = TransformerModel.create(elmTr2.getLocName(), typTr2, ratedModel.ratedS, nominalVoltageEnd2); if (!tapChangerAtEnd1) { // Structural ratio at end2 = ratedU2 / vn2 @@ -119,7 +119,7 @@ void createThreeWindings(DataObject elmTr3) { double ratedU2 = ratedModel2.ratedU1; double ratedU3 = ratedModel3.ratedU1; - Transformer3WModel transformer3WModel = Transformer3WModel.create(typTr3, rated3WModel, vn0); + Transformer3WModel transformer3WModel = Transformer3WModel.create(elmTr3.getLocName(), typTr3, rated3WModel, vn0); TransformerModel transformerModel1 = transformer3WModel.getEnd(windingTypeEnds.get(0)); TransformerModel transformerModel2 = transformer3WModel.getEnd(windingTypeEnds.get(1)); TransformerModel transformerModel3 = transformer3WModel.getEnd(windingTypeEnds.get(2)); @@ -266,10 +266,10 @@ private TransformerModel(Complex impedance, Complex shuntAdmittance) { this.b = shuntAdmittance.getImaginary(); } - private static TransformerModel create(DataObject typTr2, double ratedApparentPower, double nominalVoltageEnd2) { + private static TransformerModel create(String transformerId, DataObject typTr2, double ratedApparentPower, double nominalVoltageEnd2) { Complex impedance = createImpedance("uktr", "pcutr", typTr2, ratedApparentPower, nominalVoltageEnd2); - Complex shuntAdmittance = createShuntAdmittance("curmg", "pfe", typTr2, ratedApparentPower, nominalVoltageEnd2); + Complex shuntAdmittance = createShuntAdmittance(transformerId, "curmg", "pfe", typTr2, ratedApparentPower, nominalVoltageEnd2); Complex proportion = createProportion("itrdr", "itrdl", typTr2); if (isProportionDefined(proportion) && shuntAdmittance.abs() != 0.0) { @@ -286,10 +286,10 @@ private static Complex createImpedance(String uktrT, String pcutrT, DataObject t return createImpedanceFromMeasures(uktr, pcutr, ratedApparentPower, nominalVoltage); } - private static Complex createShuntAdmittance(String curmgT, String pfeT, DataObject typTr2, double ratedApparentPower, double nominalVoltage) { + private static Complex createShuntAdmittance(String transformerId, String curmgT, String pfeT, DataObject typTr2, double ratedApparentPower, double nominalVoltage) { float curmg = typTr2.getFloatAttributeValue(curmgT); if (curmg == 0) { - LOGGER.warn("curmg is zero"); + LOGGER.warn("{} of transformer '{}' is zero, skipping shunt admittance", transformerId, curmgT); return Complex.ZERO; } float pfe = typTr2.getFloatAttributeValue(pfeT); @@ -388,7 +388,7 @@ private TransformerModel getEnd(WindingType windingType) { return transformerModels.get(windingType); } - private static Transformer3WModel create(DataObject typTr3, Rated3WModel rated3WModel, double nominalVoltage) { + private static Transformer3WModel create(String transformerId, DataObject typTr3, Rated3WModel rated3WModel, double nominalVoltage) { double ratedSH = rated3WModel.getEnd(WindingType.HIGH).ratedS; double ratedSM = rated3WModel.getEnd(WindingType.MEDIUM).ratedS; double ratedSL = rated3WModel.getEnd(WindingType.LOW).ratedS; @@ -403,7 +403,7 @@ private static Transformer3WModel create(DataObject typTr3, Rated3WModel rated3W Complex zM = zHM.add(zML).subtract(zLH).multiply(0.5); Complex zL = zML.add(zLH).subtract(zHM).multiply(0.5); - Complex ysh = TransformerModel.createShuntAdmittance("curm3", "pfe", typTr3, ratedSH, nominalVoltage); + Complex ysh = TransformerModel.createShuntAdmittance(transformerId, "curm3", "pfe", typTr3, ratedSH, nominalVoltage); int i3loc = typTr3.findIntAttributeValue("i3loc").orElse(0); Complex yshH = assignShuntAdmittanceToWinding(ysh, i3loc, WindingType.HIGH);