Skip to content

Commit 1fdb9ea

Browse files
committed
Add 3ph power validation test
Signed-off-by: furqan463 <[email protected]>
1 parent 1cf3151 commit 1fdb9ea

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

tests/validation/converters/test_pandapower_converter_output.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,81 @@ def test_attributes_3ph(output_data_3ph: Tuple[PandaPowerData, PandaPowerData],
278278

279279
# Assert
280280
pd.testing.assert_series_equal(actual_values, expected_values, atol=5e-4, rtol=1e-4)
281+
282+
283+
def _get_total_powers_3ph(net):
284+
"""
285+
Calculates total complex power for sources, loads and losses
286+
Input: Pandapower Network
287+
Output: [s_ext_grid, s_load, s_loss]
288+
"""
289+
from numpy import complex128
290+
291+
s_ext_grid = (
292+
net.res_ext_grid_3ph.loc[:, ["p_a_mw", "p_b_mw", "p_c_mw"]].sum().sum()
293+
+ 1j * net.res_ext_grid_3ph.loc[:, ["q_a_mvar", "q_b_mvar", "q_c_mvar"]].sum().sum()
294+
)
295+
296+
if "res_asymmetric_load_3ph" in net:
297+
s_load_asym = (
298+
net.res_asymmetric_load_3ph.loc[:, ["p_a_mw", "p_b_mw", "p_c_mw"]].sum().sum()
299+
+ 1j * net.res_asymmetric_load_3ph.loc[:, ["q_a_mvar", "q_b_mvar", "q_c_mvar"]].sum().sum()
300+
)
301+
else:
302+
s_load_asym = complex128()
303+
304+
if "res_load_3ph" in net:
305+
s_load_sym = net.res_load_3ph.loc[:, "p_mw"].sum() + 1j * net.res_load_3ph.loc[:, "q_mvar"].sum()
306+
else:
307+
s_load_sym = complex128()
308+
309+
s_load = s_load_sym + s_load_asym
310+
311+
if "res_line_3ph" in net:
312+
s_loss_line = (
313+
net.res_line_3ph.loc[:, ["p_a_l_mw", "p_b_l_mw", "p_c_l_mw"]].sum().sum()
314+
+ 1j * net.res_line_3ph.loc[:, ["q_a_l_mvar", "q_b_l_mvar", "q_c_l_mvar"]].sum().sum()
315+
)
316+
else:
317+
s_loss_line = complex128()
318+
319+
if "res_line_3ph" in net:
320+
s_loss_trafo = (
321+
net.res_trafo_3ph.loc[:, ["p_a_l_mw", "p_b_l_mw", "p_c_l_mw"]].sum().sum()
322+
+ 1j * net.res_trafo_3ph.loc[:, ["q_a_l_mvar", "q_b_l_mvar", "q_c_l_mvar"]].sum().sum()
323+
)
324+
else:
325+
s_loss_trafo = complex128()
326+
327+
s_loss = s_loss_line + s_loss_trafo
328+
return [s_ext_grid, s_load, s_loss]
329+
330+
331+
def test_output_data_3ph__powers():
332+
def run_pf_asym_with_pgm(net):
333+
from pandapower.results import reset_results
334+
from power_grid_model import PowerGridModel
335+
336+
reset_results(net, "pf_3ph")
337+
pgm_converter = PandaPowerConverter()
338+
input_data, _ = pgm_converter.load_input_data(net, make_extra_info=False)
339+
pgm = PowerGridModel(input_data)
340+
output_data = pgm.calculate_power_flow(symmetric=False)
341+
output_tables = pgm_converter.convert(output_data)
342+
for table in output_tables.keys():
343+
net[table] = output_tables[table]
344+
345+
from numpy import isclose
346+
from pandapower.networks import ieee_european_lv_asymmetric
347+
348+
net = ieee_european_lv_asymmetric()
349+
run_pf_asym_with_pgm(net)
350+
s_ext_grid, s_load, s_loss = _get_total_powers_3ph(net)
351+
assert isclose(s_ext_grid, (s_load + s_loss))
352+
353+
pp.create_motor(net, 100, 0.1, 0.9)
354+
pp.create_ward(net, 200, 0.1, 0.05, 0.1, 0.05)
355+
pp.create_shunt_as_capacitor(net, 150, 0.09, 0)
356+
run_pf_asym_with_pgm(net)
357+
s_ext_grid, s_load, s_loss = _get_total_powers_3ph(net)
358+
assert isclose(s_ext_grid, (s_load + s_loss))

0 commit comments

Comments
 (0)