From 20a4f99c06d42671767b7a4ad80aed8083555eda Mon Sep 17 00:00:00 2001 From: Nitish Bharambe Date: Thu, 3 Sep 2026 08:50:51 +0200 Subject: [PATCH 1/3] add validation test Signed-off-by: Nitish Bharambe --- .../multiple-infinite-faults/input.json | 60 +++++++++++++++++++ .../input.json.license | 3 + .../multiple-infinite-faults/params.json | 9 +++ .../params.json.license | 3 + .../multiple-infinite-faults/sc_output.json | 22 +++++++ .../sc_output.json.license | 3 + 6 files changed, 100 insertions(+) create mode 100644 tests/data/short_circuit/multiple-infinite-faults/input.json create mode 100644 tests/data/short_circuit/multiple-infinite-faults/input.json.license create mode 100644 tests/data/short_circuit/multiple-infinite-faults/params.json create mode 100644 tests/data/short_circuit/multiple-infinite-faults/params.json.license create mode 100644 tests/data/short_circuit/multiple-infinite-faults/sc_output.json create mode 100644 tests/data/short_circuit/multiple-infinite-faults/sc_output.json.license diff --git a/tests/data/short_circuit/multiple-infinite-faults/input.json b/tests/data/short_circuit/multiple-infinite-faults/input.json new file mode 100644 index 0000000000..366d414536 --- /dev/null +++ b/tests/data/short_circuit/multiple-infinite-faults/input.json @@ -0,0 +1,60 @@ +{ + "version": "1.0", + "type": "input", + "is_batch": false, + "attributes": {}, + "data": { + "node": [ + { + "id": 1, + "u_rated": 10e3 + }, + { + "id": 2, + "u_rated": 10e3 + } + ], + "line": [ + { + "id": 4, + "from_node": 1, + "to_node": 2, + "from_status": 1, + "to_status": 1, + "r1": 0.2, + "x1": 0.1, + "c1": 0.0001, + "tan1": 0.002, + "r0": 0.1, + "x0": 0.3, + "c0": 0.001, + "tan0": 0.005 + } + ], + "source": [ + { + "id": 10, + "node": 1, + "status": 1, + "u_ref": 1.05, + "sk": 1e12 + } + ], + "fault": [ + { + "id": 13, + "status": 1, + "fault_type": 1, + "fault_phase": 1, + "fault_object": 2 + }, + { + "id": 14, + "status": 1, + "fault_type": 1, + "fault_phase": 1, + "fault_object": 2 + } + ] + } +} \ No newline at end of file diff --git a/tests/data/short_circuit/multiple-infinite-faults/input.json.license b/tests/data/short_circuit/multiple-infinite-faults/input.json.license new file mode 100644 index 0000000000..7601059167 --- /dev/null +++ b/tests/data/short_circuit/multiple-infinite-faults/input.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: Contributors to the Power Grid Model project + +SPDX-License-Identifier: MPL-2.0 diff --git a/tests/data/short_circuit/multiple-infinite-faults/params.json b/tests/data/short_circuit/multiple-infinite-faults/params.json new file mode 100644 index 0000000000..baf89dea0d --- /dev/null +++ b/tests/data/short_circuit/multiple-infinite-faults/params.json @@ -0,0 +1,9 @@ +{ + "calculation_method": "iec60909", + "rtol": 1e-9, + "atol": { + "default": 1e-9, + "i_(.+)?": 1e-5 + }, + "short_circuit_voltage_scaling": "minimum" +} diff --git a/tests/data/short_circuit/multiple-infinite-faults/params.json.license b/tests/data/short_circuit/multiple-infinite-faults/params.json.license new file mode 100644 index 0000000000..7601059167 --- /dev/null +++ b/tests/data/short_circuit/multiple-infinite-faults/params.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: Contributors to the Power Grid Model project + +SPDX-License-Identifier: MPL-2.0 diff --git a/tests/data/short_circuit/multiple-infinite-faults/sc_output.json b/tests/data/short_circuit/multiple-infinite-faults/sc_output.json new file mode 100644 index 0000000000..d19bbed4e2 --- /dev/null +++ b/tests/data/short_circuit/multiple-infinite-faults/sc_output.json @@ -0,0 +1,22 @@ +{ + "version": "1.0", + "type": "sc_output", + "is_batch": false, + "attributes": {}, + "data": { + "node": [ + {"id": 1, "energized": 1, "u_pu": [1.0996405082410192, 1.1000094150286046, 1.1000044648559839], "u": [6348.7774344476929, 6350.9073187788763, 6350.8787389439258], "u_angle": [-0.00026394338849927446, -2.0943996381772925, 2.0944015882987741]}, + {"id": 2, "energized": 1, "u_pu": [0, 1.4519794706567288, 0.92765722666192696], "u": [0, 8383.0073824147275, 5355.8314952896517], "u_angle": [0, -2.0640729354898411, 2.3959770686494464]} + ], + "line": [ + {"id": 4, "energized": 1, "i_from": [26677.254442408772, 615.1875456999885, 485.92242413445899], "i_from_angle": [-0.79196107133958926, -0.91124276730642428, -1.5067080262047698], "i_to": [26359.514427876158, 0, 6.5765198925356682e-12], "i_to_angle": [2.3522017704414915, 0, -1.5083775167989393]} + ], + "source": [ + {"id": 10, "energized": 1, "i": [26677.254442411213, 615.18754569687542, 485.9224241315622], "i_angle": [-0.79196107133973304, -0.91124276731195797, -1.5067080261937864]} + ], + "fault": [ + {"id": 13, "energized": 1, "i_f": [13179.757213938077, 0, 0], "i_f_angle": [-0.78939088314830208, 0, 0]}, + {"id": 14, "energized": 1, "i_f": [13179.757213938077, 0, 0], "i_f_angle": [-0.78939088314830208, 0, 0]} + ] + } +} \ No newline at end of file diff --git a/tests/data/short_circuit/multiple-infinite-faults/sc_output.json.license b/tests/data/short_circuit/multiple-infinite-faults/sc_output.json.license new file mode 100644 index 0000000000..7601059167 --- /dev/null +++ b/tests/data/short_circuit/multiple-infinite-faults/sc_output.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: Contributors to the Power Grid Model project + +SPDX-License-Identifier: MPL-2.0 From 8d592d5ae5c4ac4fd43c11d33dfb257e77f766ac Mon Sep 17 00:00:00 2001 From: Nitish Bharambe Date: Thu, 3 Sep 2026 08:56:35 +0200 Subject: [PATCH 2/3] add fix Signed-off-by: Nitish Bharambe --- .../math_solver/short_circuit_solver.hpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/power_grid_model_c/power_grid_model/include/power_grid_model/math_solver/short_circuit_solver.hpp b/power_grid_model_c/power_grid_model/include/power_grid_model/math_solver/short_circuit_solver.hpp index 72832de645..9b4c7168a5 100644 --- a/power_grid_model_c/power_grid_model/include/power_grid_model/math_solver/short_circuit_solver.hpp +++ b/power_grid_model_c/power_grid_model/include/power_grid_model/math_solver/short_circuit_solver.hpp @@ -103,19 +103,23 @@ template class ShortCircuitSolver { ComplexTensor& diagonal_element, ComplexValue& u_bus, IdxVector& infinite_admittance_fault_counter, FaultType const& fault_type, IntS phase_1, IntS phase_2) { + bool infinite_added = false; for (Idx const fault_number : faults) { DoubleComplex const y_fault = input.faults[fault_number].y_fault; if (std::isinf(y_fault.real())) { assert(std::isinf(y_fault.imag())); infinite_admittance_fault_counter[bus_number] += 1; - add_fault_with_infinite_impedance(bus_number, y_bus, diagonal_element, u_bus, fault_type, phase_1, - phase_2); - // If there is a fault with infinite admittance, there is no need to add other faults to that - // bus - break; + if (!infinite_added) { + // If there is a fault with infinite admittance, there is no need to add other faults to that + // bus + add_fault_with_infinite_impedance(bus_number, y_bus, diagonal_element, u_bus, fault_type, phase_1, + phase_2); + infinite_added = true; + } + } else { + assert(!std::isinf(y_fault.imag())); + add_fault(y_fault, bus_number, y_bus, diagonal_element, u_bus, fault_type, phase_1, phase_2); } - assert(!std::isinf(y_fault.imag())); - add_fault(y_fault, bus_number, y_bus, diagonal_element, u_bus, fault_type, phase_1, phase_2); } } From cc91a9c800c44bd93cf378538832d8588edc3342 Mon Sep 17 00:00:00 2001 From: Nitish Bharambe <78108900+nitbharambe@users.noreply.github.com> Date: Fri, 4 Sep 2026 09:05:36 +0200 Subject: [PATCH 3/3] Change short circuit voltage scaling to maximum Signed-off-by: Nitish Bharambe <78108900+nitbharambe@users.noreply.github.com> --- tests/data/short_circuit/multiple-infinite-faults/params.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/data/short_circuit/multiple-infinite-faults/params.json b/tests/data/short_circuit/multiple-infinite-faults/params.json index baf89dea0d..f146b8585b 100644 --- a/tests/data/short_circuit/multiple-infinite-faults/params.json +++ b/tests/data/short_circuit/multiple-infinite-faults/params.json @@ -5,5 +5,5 @@ "default": 1e-9, "i_(.+)?": 1e-5 }, - "short_circuit_voltage_scaling": "minimum" + "short_circuit_voltage_scaling": "maximum" }