@@ -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