def final_results(): global V_complex_profile, V_polar_final, N, Ploss for i in range(N): magnitude, radians = cm.polar(V_complex_profile[i]) V_polar_final[i, 0], V_polar_final[i, 1] = magnitude, np.rad2deg(radians) Ploss = Pade(coefficients[2 * N], series_large)
def computing_voltages_mismatch(): global series_large, Y_Vsp_PV, Soluc_no_eval, Vre_PV, Soluc_eval, coefficients, N, Mis, list_coef global Ytrans_mod, V_complex, W, Pi, Si, Pg, Pd, Qg, Qd, first_check, pade_til, Q_limits global solve, detailed_run_print, Flag_divergence Vre_PV = np.zeros((N, N_coef), dtype=float) V_complex = np.zeros((N, N_coef), dtype=complex) W = np.ones((N, N_coef), dtype=complex) Flag_recalculate = 1 Flag_divergence = False Calculo_Vre_PV(0) compute_complex_voltages(0) Pi = Pg - Pd Si = Pi + Qg * 1j - Qd * 1j coef_actual = 0 series_large = 1 while True: coef_actual += 1 if detailed_run_print: print("Computing coefficient: %d" % coef_actual) Calculo_Vre_PV(coef_actual) for i in range(len(Soluc_no_eval)): Soluc_no_eval[i][1](Soluc_no_eval[i][0], coef_actual) resta_columnas_PV = np.zeros(2 * N, dtype=float) for Vre_vec in Y_Vsp_PV: array = Vre_PV[Vre_vec[0]][coef_actual] * Vre_vec[1] pos = 0 for k in branches_buses[Vre_vec[0]]: resta_columnas_PV[2 * k] += array[pos] resta_columnas_PV[2 * k + 1] += array[pos + 1] pos += 2 aux = Soluc_eval[:, coef_actual] - resta_columnas_PV # New column of coefficients coefficients[:, coef_actual] = solve(aux) compute_complex_voltages(coef_actual) calculate_inverse_voltages_w_array(coef_actual) # Mismatch check Flag_Mismatch = 0 series_large += 1 if (series_large - 1) % 2 == 0 and series_large > 3: if first_check: first_check = False for i in range(N): magn1, rad1 = cm.polar(Pade(V_complex[i], series_large - 2)) V_complex_profile[i] = Pade(V_complex[i], series_large) magn2, rad2 = cm.polar(V_complex_profile[i]) if ((abs(magn1 - magn2) > Mis) or (abs(rad1 - rad2) > Mis)): Flag_Mismatch = 1 pade_til = i + 1 break else: seguir = True for i in range(pade_til): magn1, rad1 = cm.polar(V_complex_profile[i]) V_complex_profile[i] = Pade(V_complex[i], series_large) magn2, rad2 = cm.polar(V_complex_profile[i]) if ((abs(magn1 - magn2) > Mis) or (abs(rad1 - rad2) > Mis)): Flag_Mismatch = 1 pade_til = i + 1 seguir = False break if seguir: for i in range(pade_til, N): magn1, rad1 = cm.polar( Pade(V_complex[i], series_large - 2)) V_complex_profile[i] = Pade(V_complex[i], series_large) magn2, rad2 = cm.polar(V_complex_profile[i]) if ((abs(magn1 - magn2) > Mis) or (abs(rad1 - rad2) > Mis)): Flag_Mismatch = 1 pade_til = i + 1 break if Flag_Mismatch == 0: # Qgen check or ignore limits if (Q_limits): if (Check_PVLIM()): if detailed_run_print: print( "At coefficient %d the system is to be resolved due to PVLIM to PQ switches\n" % series_large) list_coef.append(series_large) Flag_recalculate = 0 return Flag_recalculate print( '\nConvergence has been reached. %d coefficients were calculated' % series_large) list_coef.append(series_large) break if series_large > N_coef - 1: print('\nThe problem has no physical solution') Flag_divergence = 1 break return Flag_recalculate