From 63a6b29e95ecc1e9952f621579a39ff864b04033 Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Mon, 7 Sep 2026 13:14:57 -0500 Subject: [PATCH 01/12] test: add IEEE 14-bus power flow parameters Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/params.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tests/data/power_flow/ieee14/params.json diff --git a/tests/data/power_flow/ieee14/params.json b/tests/data/power_flow/ieee14/params.json new file mode 100644 index 0000000000..19134c4ce9 --- /dev/null +++ b/tests/data/power_flow/ieee14/params.json @@ -0,0 +1,5 @@ +{ + "calculation_method": ["newton_raphson"], + "rtol": 1e-3, + "atol": 1e-4 +} From 5cb1a2083a427beb5e376d19e3703fcbb10bc70c Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Mon, 7 Sep 2026 13:15:11 -0500 Subject: [PATCH 02/12] docs: document IEEE 14-bus validation case Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 tests/data/power_flow/ieee14/README.md diff --git a/tests/data/power_flow/ieee14/README.md b/tests/data/power_flow/ieee14/README.md new file mode 100644 index 0000000000..43fdc0d756 --- /dev/null +++ b/tests/data/power_flow/ieee14/README.md @@ -0,0 +1,23 @@ +# Validation case: IEEE 14-bus system + +This validation case models the public IEEE 14-bus power-flow test system as a symmetrical power-flow case for Power Grid Model (PGM). + +## Source and scope + +The source data are the IEEE 14-bus test case from the University of Washington Power Systems Test Case Archive, distributed in IEEE Common Data Format. The tabular values used for this conversion are the CC0 `caseformat/ieee14` representation converted from that archive. + +- Original archive: https://labs.ece.uw.edu/pstca/pf14/ieee14cdf.txt +- Tabular conversion: https://github.com/caseformat/ieee14 +- System base power: 100 MVA + +The expected output validates bus voltage magnitudes. The source data publish voltage magnitudes to three decimal places, so the validation tolerance reflects that source precision. + +## Conversion to PGM + +The original case does not provide physical nominal bus voltages (`BASE_KV` is zero). A common nominal voltage of 100 kV is therefore used for all PGM nodes. This does not change the per-unit power-flow solution when all per-unit network quantities are converted consistently. + +With a 100 MVA source base and 100 kV nominal voltage, the impedance base is 100 ohm. Branch series resistance and reactance are converted from per unit to ohm with this base. MATPOWER/IEEE branch charging susceptance is a total branch value, so half is assigned to each end through `generic_branch.b1`. Off-nominal transformer ratios are represented by `generic_branch.k`. + +PQ demands are represented by `sym_load`. The slack bus is represented by a stiff `source` at bus 1. Generators at buses 2, 3, 6, and 8 are represented by `sym_gen` together with active `voltage_regulator` components so that Newton-Raphson treats those buses as voltage-controlled PV nodes. The fixed shunt at bus 9 is represented by a `shunt`. + +Only voltage magnitude is included in `sym_output.json`; generator reactive power and branch power-flow values are intentionally outside the scope of this first validation case. From 62da72152dc9cc710239f0a7b78d96c426cc2c40 Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Mon, 7 Sep 2026 13:15:41 -0500 Subject: [PATCH 03/12] test: model IEEE 14-bus network in PGM Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/input.json | 77 +++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 tests/data/power_flow/ieee14/input.json diff --git a/tests/data/power_flow/ieee14/input.json b/tests/data/power_flow/ieee14/input.json new file mode 100644 index 0000000000..888267dbda --- /dev/null +++ b/tests/data/power_flow/ieee14/input.json @@ -0,0 +1,77 @@ +{ + "version": "1.0", + "type": "input", + "is_batch": false, + "attributes": {}, + "data": { + "node": [ + {"id": 1, "u_rated": 100000.0}, + {"id": 2, "u_rated": 100000.0}, + {"id": 3, "u_rated": 100000.0}, + {"id": 4, "u_rated": 100000.0}, + {"id": 5, "u_rated": 100000.0}, + {"id": 6, "u_rated": 100000.0}, + {"id": 7, "u_rated": 100000.0}, + {"id": 8, "u_rated": 100000.0}, + {"id": 9, "u_rated": 100000.0}, + {"id": 10, "u_rated": 100000.0}, + {"id": 11, "u_rated": 100000.0}, + {"id": 12, "u_rated": 100000.0}, + {"id": 13, "u_rated": 100000.0}, + {"id": 14, "u_rated": 100000.0} + ], + "generic_branch": [ + {"id": 101, "from_node": 1, "to_node": 2, "from_status": 1, "to_status": 1, "r1": 1.938, "x1": 5.917, "g1": 0.0, "b1": 0.000264, "k": 1.0, "theta": 0.0}, + {"id": 102, "from_node": 1, "to_node": 5, "from_status": 1, "to_status": 1, "r1": 5.403, "x1": 22.304, "g1": 0.0, "b1": 0.000246, "k": 1.0, "theta": 0.0}, + {"id": 103, "from_node": 2, "to_node": 3, "from_status": 1, "to_status": 1, "r1": 4.699, "x1": 19.797, "g1": 0.0, "b1": 0.000219, "k": 1.0, "theta": 0.0}, + {"id": 104, "from_node": 2, "to_node": 4, "from_status": 1, "to_status": 1, "r1": 5.811, "x1": 17.632, "g1": 0.0, "b1": 0.00017, "k": 1.0, "theta": 0.0}, + {"id": 105, "from_node": 2, "to_node": 5, "from_status": 1, "to_status": 1, "r1": 5.695, "x1": 17.388, "g1": 0.0, "b1": 0.000173, "k": 1.0, "theta": 0.0}, + {"id": 106, "from_node": 3, "to_node": 4, "from_status": 1, "to_status": 1, "r1": 6.701, "x1": 17.103, "g1": 0.0, "b1": 0.000064, "k": 1.0, "theta": 0.0}, + {"id": 107, "from_node": 4, "to_node": 5, "from_status": 1, "to_status": 1, "r1": 1.335, "x1": 4.211, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 108, "from_node": 4, "to_node": 7, "from_status": 1, "to_status": 1, "r1": 0.0, "x1": 20.912, "g1": 0.0, "b1": 0.0, "k": 0.978, "theta": 0.0}, + {"id": 109, "from_node": 4, "to_node": 9, "from_status": 1, "to_status": 1, "r1": 0.0, "x1": 55.618, "g1": 0.0, "b1": 0.0, "k": 0.969, "theta": 0.0}, + {"id": 110, "from_node": 5, "to_node": 6, "from_status": 1, "to_status": 1, "r1": 0.0, "x1": 25.202, "g1": 0.0, "b1": 0.0, "k": 0.932, "theta": 0.0}, + {"id": 111, "from_node": 6, "to_node": 11, "from_status": 1, "to_status": 1, "r1": 9.498, "x1": 19.89, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 112, "from_node": 6, "to_node": 12, "from_status": 1, "to_status": 1, "r1": 12.291, "x1": 25.581, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 113, "from_node": 6, "to_node": 13, "from_status": 1, "to_status": 1, "r1": 6.615, "x1": 13.027, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 114, "from_node": 7, "to_node": 8, "from_status": 1, "to_status": 1, "r1": 0.0, "x1": 17.615, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 115, "from_node": 7, "to_node": 9, "from_status": 1, "to_status": 1, "r1": 0.0, "x1": 11.001, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 116, "from_node": 9, "to_node": 10, "from_status": 1, "to_status": 1, "r1": 3.181, "x1": 8.45, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 117, "from_node": 9, "to_node": 14, "from_status": 1, "to_status": 1, "r1": 12.711, "x1": 27.038, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 118, "from_node": 10, "to_node": 11, "from_status": 1, "to_status": 1, "r1": 8.205, "x1": 19.207, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 119, "from_node": 12, "to_node": 13, "from_status": 1, "to_status": 1, "r1": 22.092, "x1": 19.988, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, + {"id": 120, "from_node": 13, "to_node": 14, "from_status": 1, "to_status": 1, "r1": 17.093, "x1": 34.802, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0} + ], + "sym_load": [ + {"id": 201, "node": 2, "status": 1, "type": 0, "p_specified": 21700000.0, "q_specified": 12700000.0}, + {"id": 202, "node": 3, "status": 1, "type": 0, "p_specified": 94200000.0, "q_specified": 19000000.0}, + {"id": 203, "node": 4, "status": 1, "type": 0, "p_specified": 47800000.0, "q_specified": -3900000.0}, + {"id": 204, "node": 5, "status": 1, "type": 0, "p_specified": 7600000.0, "q_specified": 1600000.0}, + {"id": 205, "node": 6, "status": 1, "type": 0, "p_specified": 11200000.0, "q_specified": 7500000.0}, + {"id": 206, "node": 9, "status": 1, "type": 0, "p_specified": 29500000.0, "q_specified": 16600000.0}, + {"id": 207, "node": 10, "status": 1, "type": 0, "p_specified": 9000000.0, "q_specified": 5800000.0}, + {"id": 208, "node": 11, "status": 1, "type": 0, "p_specified": 3500000.0, "q_specified": 1800000.0}, + {"id": 209, "node": 12, "status": 1, "type": 0, "p_specified": 6100000.0, "q_specified": 1600000.0}, + {"id": 210, "node": 13, "status": 1, "type": 0, "p_specified": 13500000.0, "q_specified": 5800000.0}, + {"id": 211, "node": 14, "status": 1, "type": 0, "p_specified": 14900000.0, "q_specified": 5000000.0} + ], + "sym_gen": [ + {"id": 301, "node": 2, "status": 1, "type": 0, "p_specified": 40000000.0, "q_specified": 0.0}, + {"id": 302, "node": 3, "status": 1, "type": 0, "p_specified": 0.0, "q_specified": 0.0}, + {"id": 303, "node": 6, "status": 1, "type": 0, "p_specified": 0.0, "q_specified": 0.0}, + {"id": 304, "node": 8, "status": 1, "type": 0, "p_specified": 0.0, "q_specified": 0.0} + ], + "voltage_regulator": [ + {"id": 401, "regulated_object": 301, "status": 1, "u_ref": 1.045}, + {"id": 402, "regulated_object": 302, "status": 1, "u_ref": 1.01}, + {"id": 403, "regulated_object": 303, "status": 1, "u_ref": 1.07}, + {"id": 404, "regulated_object": 304, "status": 1, "u_ref": 1.09} + ], + "shunt": [ + {"id": 501, "node": 9, "status": 1, "g1": 0.0, "b1": 0.0019, "g0": 0.0, "b0": 0.0019} + ], + "source": [ + {"id": 601, "node": 1, "status": 1, "u_ref": 1.06, "sk": 1e40, "rx_ratio": 0.1, "z01_ratio": 1.0} + ] + } +} From 8c1fc410635668354c6b72fdfd7393bb354dac6e Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Mon, 7 Sep 2026 13:15:54 -0500 Subject: [PATCH 04/12] test: add IEEE 14-bus expected voltages Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/sym_output.json | 24 ++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 tests/data/power_flow/ieee14/sym_output.json diff --git a/tests/data/power_flow/ieee14/sym_output.json b/tests/data/power_flow/ieee14/sym_output.json new file mode 100644 index 0000000000..24b7603fbf --- /dev/null +++ b/tests/data/power_flow/ieee14/sym_output.json @@ -0,0 +1,24 @@ +{ + "version": "1.0", + "type": "sym_output", + "is_batch": false, + "attributes": {}, + "data": { + "node": [ + {"id": 1, "u_pu": 1.06}, + {"id": 2, "u_pu": 1.045}, + {"id": 3, "u_pu": 1.01}, + {"id": 4, "u_pu": 1.019}, + {"id": 5, "u_pu": 1.02}, + {"id": 6, "u_pu": 1.07}, + {"id": 7, "u_pu": 1.062}, + {"id": 8, "u_pu": 1.09}, + {"id": 9, "u_pu": 1.056}, + {"id": 10, "u_pu": 1.051}, + {"id": 11, "u_pu": 1.057}, + {"id": 12, "u_pu": 1.055}, + {"id": 13, "u_pu": 1.05}, + {"id": 14, "u_pu": 1.036} + ] + } +} From cb4a2b129c4a29bbc3c96c37712211df43ab1e6a Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Mon, 7 Sep 2026 13:30:16 -0500 Subject: [PATCH 05/12] test: use precise IEEE 14-bus voltage solution Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/sym_output.json | 28 ++++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/data/power_flow/ieee14/sym_output.json b/tests/data/power_flow/ieee14/sym_output.json index 24b7603fbf..20a788e5e7 100644 --- a/tests/data/power_flow/ieee14/sym_output.json +++ b/tests/data/power_flow/ieee14/sym_output.json @@ -5,20 +5,20 @@ "attributes": {}, "data": { "node": [ - {"id": 1, "u_pu": 1.06}, - {"id": 2, "u_pu": 1.045}, - {"id": 3, "u_pu": 1.01}, - {"id": 4, "u_pu": 1.019}, - {"id": 5, "u_pu": 1.02}, - {"id": 6, "u_pu": 1.07}, - {"id": 7, "u_pu": 1.062}, - {"id": 8, "u_pu": 1.09}, - {"id": 9, "u_pu": 1.056}, - {"id": 10, "u_pu": 1.051}, - {"id": 11, "u_pu": 1.057}, - {"id": 12, "u_pu": 1.055}, - {"id": 13, "u_pu": 1.05}, - {"id": 14, "u_pu": 1.036} + {"id": 1, "u_pu": 1.06, "u_angle": 0.0}, + {"id": 2, "u_pu": 1.045, "u_angle": -0.08696277530986946}, + {"id": 3, "u_pu": 1.01, "u_angle": -0.22209314731627844}, + {"id": 4, "u_pu": 1.01767, "u_angle": -0.1799923150996712}, + {"id": 5, "u_pu": 1.01951, "u_angle": -0.1531316979114785}, + {"id": 6, "u_pu": 1.07, "u_angle": -0.24820152759686162}, + {"id": 7, "u_pu": 1.06152, "u_angle": -0.23316900674943444}, + {"id": 8, "u_pu": 1.09, "u_angle": -0.23316900674943444}, + {"id": 9, "u_pu": 1.05593, "u_angle": -0.2607260103091729}, + {"id": 10, "u_pu": 1.05099, "u_angle": -0.26349584783208796}, + {"id": 11, "u_pu": 1.05691, "u_angle": -0.2581446683454733}, + {"id": 12, "u_pu": 1.05519, "u_angle": -0.26311711138440513}, + {"id": 13, "u_pu": 1.05038, "u_angle": -0.2645255920907646}, + {"id": 14, "u_pu": 1.03553, "u_angle": -0.2798391109477628} ] } } From 50012ac9a7b352e5c3428eb19aa3cb1749158d9a Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Mon, 7 Sep 2026 13:30:42 -0500 Subject: [PATCH 06/12] test: tighten IEEE 14-bus validation tolerance Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/params.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/data/power_flow/ieee14/params.json b/tests/data/power_flow/ieee14/params.json index 19134c4ce9..f7fc546054 100644 --- a/tests/data/power_flow/ieee14/params.json +++ b/tests/data/power_flow/ieee14/params.json @@ -1,5 +1,5 @@ { "calculation_method": ["newton_raphson"], - "rtol": 1e-3, - "atol": 1e-4 + "rtol": 1e-5, + "atol": 1e-5 } From 86c2b38471179bed1ff7b51059b59cdefc9ec02c Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Mon, 7 Sep 2026 13:31:03 -0500 Subject: [PATCH 07/12] docs: document precise IEEE 14-bus reference solution Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/README.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/tests/data/power_flow/ieee14/README.md b/tests/data/power_flow/ieee14/README.md index 43fdc0d756..2098142bfd 100644 --- a/tests/data/power_flow/ieee14/README.md +++ b/tests/data/power_flow/ieee14/README.md @@ -1,23 +1,30 @@ + + # Validation case: IEEE 14-bus system This validation case models the public IEEE 14-bus power-flow test system as a symmetrical power-flow case for Power Grid Model (PGM). ## Source and scope -The source data are the IEEE 14-bus test case from the University of Washington Power Systems Test Case Archive, distributed in IEEE Common Data Format. The tabular values used for this conversion are the CC0 `caseformat/ieee14` representation converted from that archive. +The source data are the IEEE 14-bus test case from the University of Washington Power Systems Test Case Archive, distributed in IEEE Common Data Format. The tabular values used for the conversion are the CC0 `caseformat/ieee14` representation, while the expected voltage magnitudes and angles are taken from a public PSS/E RAW representation of the same IEEE 14-bus solution. - Original archive: https://labs.ece.uw.edu/pstca/pf14/ieee14cdf.txt - Tabular conversion: https://github.com/caseformat/ieee14 +- Reference solution: https://github.com/ITI/models/blob/master/electric-grid/physical/reference/ieee-14bus/models/ieee-14-bus.raw - System base power: 100 MVA -The expected output validates bus voltage magnitudes. The source data publish voltage magnitudes to three decimal places, so the validation tolerance reflects that source precision. +The expected output validates bus voltage magnitude and angle. The reference solution provides five decimal places for voltage magnitude and four decimal places for voltage angle in degrees. ## Conversion to PGM -The original case does not provide physical nominal bus voltages (`BASE_KV` is zero). A common nominal voltage of 100 kV is therefore used for all PGM nodes. This does not change the per-unit power-flow solution when all per-unit network quantities are converted consistently. +The tabular case does not provide physical nominal bus voltages (`BASE_KV` is zero). A common nominal voltage of 100 kV is therefore used for all PGM nodes. This does not change the per-unit power-flow solution when all per-unit network quantities are converted consistently. -With a 100 MVA source base and 100 kV nominal voltage, the impedance base is 100 ohm. Branch series resistance and reactance are converted from per unit to ohm with this base. MATPOWER/IEEE branch charging susceptance is a total branch value, so half is assigned to each end through `generic_branch.b1`. Off-nominal transformer ratios are represented by `generic_branch.k`. +With a 100 MVA source base and 100 kV nominal voltage, the impedance base is 100 ohm. Branch series resistance and reactance are converted from per unit to ohm with this base. IEEE branch charging susceptance is a total branch value, so half is assigned to each end through `generic_branch.b1`. Off-nominal transformer ratios are represented by `generic_branch.k`. PQ demands are represented by `sym_load`. The slack bus is represented by a stiff `source` at bus 1. Generators at buses 2, 3, 6, and 8 are represented by `sym_gen` together with active `voltage_regulator` components so that Newton-Raphson treats those buses as voltage-controlled PV nodes. The fixed shunt at bus 9 is represented by a `shunt`. -Only voltage magnitude is included in `sym_output.json`; generator reactive power and branch power-flow values are intentionally outside the scope of this first validation case. +The expected output intentionally focuses on bus voltage magnitude and angle for this first validation case; generator reactive power and branch power-flow values are outside its scope. From 18f89abd4a7c8211dbd1e927bd7ecb8bc8b328d1 Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Tue, 8 Sep 2026 09:54:01 -0500 Subject: [PATCH 08/12] chore: add license for IEEE 14-bus input Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/input.json.license | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tests/data/power_flow/ieee14/input.json.license diff --git a/tests/data/power_flow/ieee14/input.json.license b/tests/data/power_flow/ieee14/input.json.license new file mode 100644 index 0000000000..7601059167 --- /dev/null +++ b/tests/data/power_flow/ieee14/input.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: Contributors to the Power Grid Model project + +SPDX-License-Identifier: MPL-2.0 From 38c98a66a267b8ac11b7aa95cb60d9f5455ed51c Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Tue, 8 Sep 2026 09:54:07 -0500 Subject: [PATCH 09/12] chore: add license for IEEE 14-bus params Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/params.json.license | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tests/data/power_flow/ieee14/params.json.license diff --git a/tests/data/power_flow/ieee14/params.json.license b/tests/data/power_flow/ieee14/params.json.license new file mode 100644 index 0000000000..7601059167 --- /dev/null +++ b/tests/data/power_flow/ieee14/params.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: Contributors to the Power Grid Model project + +SPDX-License-Identifier: MPL-2.0 From 4fe99deb83cc8b30a0e1b3e7eb25efc55e01a3a4 Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Tue, 8 Sep 2026 09:54:14 -0500 Subject: [PATCH 10/12] chore: add license for IEEE 14-bus output Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/sym_output.json.license | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tests/data/power_flow/ieee14/sym_output.json.license diff --git a/tests/data/power_flow/ieee14/sym_output.json.license b/tests/data/power_flow/ieee14/sym_output.json.license new file mode 100644 index 0000000000..7601059167 --- /dev/null +++ b/tests/data/power_flow/ieee14/sym_output.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: Contributors to the Power Grid Model project + +SPDX-License-Identifier: MPL-2.0 From de22c1622e8db2d95d5536a1ce1571758d888c53 Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Wed, 9 Sep 2026 12:13:55 -0500 Subject: [PATCH 11/12] fix: correct IEEE 14-bus branch charging Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/README.md | 2 +- tests/data/power_flow/ieee14/input.json | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/data/power_flow/ieee14/README.md b/tests/data/power_flow/ieee14/README.md index 2098142bfd..940137f11c 100644 --- a/tests/data/power_flow/ieee14/README.md +++ b/tests/data/power_flow/ieee14/README.md @@ -23,7 +23,7 @@ The expected output validates bus voltage magnitude and angle. The reference sol The tabular case does not provide physical nominal bus voltages (`BASE_KV` is zero). A common nominal voltage of 100 kV is therefore used for all PGM nodes. This does not change the per-unit power-flow solution when all per-unit network quantities are converted consistently. -With a 100 MVA source base and 100 kV nominal voltage, the impedance base is 100 ohm. Branch series resistance and reactance are converted from per unit to ohm with this base. IEEE branch charging susceptance is a total branch value, so half is assigned to each end through `generic_branch.b1`. Off-nominal transformer ratios are represented by `generic_branch.k`. +With a 100 MVA source base and 100 kV nominal voltage, the impedance base is 100 ohm. Branch series resistance and reactance are converted from per unit to ohm with this base. IEEE branch charging susceptance is provided as the total branch value through `generic_branch.b1`; PGM accounts for its distribution across the branch ends. Off-nominal transformer ratios are represented by `generic_branch.k`. PQ demands are represented by `sym_load`. The slack bus is represented by a stiff `source` at bus 1. Generators at buses 2, 3, 6, and 8 are represented by `sym_gen` together with active `voltage_regulator` components so that Newton-Raphson treats those buses as voltage-controlled PV nodes. The fixed shunt at bus 9 is represented by a `shunt`. diff --git a/tests/data/power_flow/ieee14/input.json b/tests/data/power_flow/ieee14/input.json index 888267dbda..20d7864604 100644 --- a/tests/data/power_flow/ieee14/input.json +++ b/tests/data/power_flow/ieee14/input.json @@ -21,12 +21,12 @@ {"id": 14, "u_rated": 100000.0} ], "generic_branch": [ - {"id": 101, "from_node": 1, "to_node": 2, "from_status": 1, "to_status": 1, "r1": 1.938, "x1": 5.917, "g1": 0.0, "b1": 0.000264, "k": 1.0, "theta": 0.0}, - {"id": 102, "from_node": 1, "to_node": 5, "from_status": 1, "to_status": 1, "r1": 5.403, "x1": 22.304, "g1": 0.0, "b1": 0.000246, "k": 1.0, "theta": 0.0}, - {"id": 103, "from_node": 2, "to_node": 3, "from_status": 1, "to_status": 1, "r1": 4.699, "x1": 19.797, "g1": 0.0, "b1": 0.000219, "k": 1.0, "theta": 0.0}, - {"id": 104, "from_node": 2, "to_node": 4, "from_status": 1, "to_status": 1, "r1": 5.811, "x1": 17.632, "g1": 0.0, "b1": 0.00017, "k": 1.0, "theta": 0.0}, - {"id": 105, "from_node": 2, "to_node": 5, "from_status": 1, "to_status": 1, "r1": 5.695, "x1": 17.388, "g1": 0.0, "b1": 0.000173, "k": 1.0, "theta": 0.0}, - {"id": 106, "from_node": 3, "to_node": 4, "from_status": 1, "to_status": 1, "r1": 6.701, "x1": 17.103, "g1": 0.0, "b1": 0.000064, "k": 1.0, "theta": 0.0}, + {"id": 101, "from_node": 1, "to_node": 2, "from_status": 1, "to_status": 1, "r1": 1.938, "x1": 5.917, "g1": 0.0, "b1": 0.000528, "k": 1.0, "theta": 0.0}, + {"id": 102, "from_node": 1, "to_node": 5, "from_status": 1, "to_status": 1, "r1": 5.403, "x1": 22.304, "g1": 0.0, "b1": 0.000492, "k": 1.0, "theta": 0.0}, + {"id": 103, "from_node": 2, "to_node": 3, "from_status": 1, "to_status": 1, "r1": 4.699, "x1": 19.797, "g1": 0.0, "b1": 0.000438, "k": 1.0, "theta": 0.0}, + {"id": 104, "from_node": 2, "to_node": 4, "from_status": 1, "to_status": 1, "r1": 5.811, "x1": 17.632, "g1": 0.0, "b1": 0.00034, "k": 1.0, "theta": 0.0}, + {"id": 105, "from_node": 2, "to_node": 5, "from_status": 1, "to_status": 1, "r1": 5.695, "x1": 17.388, "g1": 0.0, "b1": 0.000346, "k": 1.0, "theta": 0.0}, + {"id": 106, "from_node": 3, "to_node": 4, "from_status": 1, "to_status": 1, "r1": 6.701, "x1": 17.103, "g1": 0.0, "b1": 0.000128, "k": 1.0, "theta": 0.0}, {"id": 107, "from_node": 4, "to_node": 5, "from_status": 1, "to_status": 1, "r1": 1.335, "x1": 4.211, "g1": 0.0, "b1": 0.0, "k": 1.0, "theta": 0.0}, {"id": 108, "from_node": 4, "to_node": 7, "from_status": 1, "to_status": 1, "r1": 0.0, "x1": 20.912, "g1": 0.0, "b1": 0.0, "k": 0.978, "theta": 0.0}, {"id": 109, "from_node": 4, "to_node": 9, "from_status": 1, "to_status": 1, "r1": 0.0, "x1": 55.618, "g1": 0.0, "b1": 0.0, "k": 0.969, "theta": 0.0}, From 4aab5aaa22f6dda38570f79f8865c533bd884581 Mon Sep 17 00:00:00 2001 From: Aisvarya Sampath Kumar Date: Sat, 12 Sep 2026 23:19:53 -0500 Subject: [PATCH 12/12] docs: pin IEEE 14-bus source versions Signed-off-by: Aisvarya Sampath Kumar --- tests/data/power_flow/ieee14/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/data/power_flow/ieee14/README.md b/tests/data/power_flow/ieee14/README.md index 940137f11c..44bf23a3ad 100644 --- a/tests/data/power_flow/ieee14/README.md +++ b/tests/data/power_flow/ieee14/README.md @@ -13,8 +13,8 @@ This validation case models the public IEEE 14-bus power-flow test system as a s The source data are the IEEE 14-bus test case from the University of Washington Power Systems Test Case Archive, distributed in IEEE Common Data Format. The tabular values used for the conversion are the CC0 `caseformat/ieee14` representation, while the expected voltage magnitudes and angles are taken from a public PSS/E RAW representation of the same IEEE 14-bus solution. - Original archive: https://labs.ece.uw.edu/pstca/pf14/ieee14cdf.txt -- Tabular conversion: https://github.com/caseformat/ieee14 -- Reference solution: https://github.com/ITI/models/blob/master/electric-grid/physical/reference/ieee-14bus/models/ieee-14-bus.raw +- Tabular conversion (version 2): https://github.com/caseformat/ieee14/commit/a9e12bb3f08037785631e0a5e5006b07e01e05c9 +- Reference solution: https://github.com/ITI/models/blob/1d0d1e137dccb01f7f5e5c442c8acf35ce17d474/electric-grid/physical/reference/ieee-14bus/models/ieee-14-bus.raw - System base power: 100 MVA The expected output validates bus voltage magnitude and angle. The reference solution provides five decimal places for voltage magnitude and four decimal places for voltage angle in degrees.