First time here? We are a friendly community of Power Systems Engineers. Check out the FAQ!
Form the potential co-efficient matrix.
P = np.array([(P11, P12, P13, P14, P15, P16, P17, P18),
(P21, P22, P23, P24, P25, P26, P27, P28),
(P31, P32, P33, P34, P35, P36, P37, P38),
(P41, P42, P43, P44, P45, P46, P47, P48),
(P51, P52, P53, P54, P55, P56, P57, P58),
(P61, P62, P63, P64, P65, P66, P67, P68),
(P71, P72, P73, P74, P75, P76, P77, P78),
(P81, P82, P83, P84, P85, P86, P87, P88)])
Get the full phase capacitance matrix.
C = np.linalg.inv(P)
Determine the +ve, -ve and 0 seq. susceptances after eliminating the earth wires.
Paa = P[:3, :3]
Pab = P[:3, 3:6]
Pba = P[3:6, :3]
Pbb = P[3:6, 3:6]
Pas = P[:3, 6:]
Pbs = P[3:6, 6:]
Pss = P[6:, 6:]
P_AA = Paa-np.dot(Pas,np.dot(np.linalg.inv(Pss),Pas.T))
P_AB = Pab-np.dot(Pas,np.dot(np.linalg.inv(Pss),Pbs.T))
P_BA = Pba-np.dot(Pbs,np.dot(np.linalg.inv(Pss),Pas.T))
P_BB = Pbb-np.dot(Pbs,np.dot(np.linalg.inv(Pss),Pbs.T))
Pph = np.vstack((np.hstack((P_AA,P_AB)), np.hstack((P_BA,P_BB))))
Cph = np.linalg.inv(Pph)
Bph = 2*np.pi*f*Cph
Baa = Bph[:3, :3]
Bab = Bph[:3, 3:6]
Bba = Bph[3:6, :3]
Bbb = Bph[3:6, 3:6]
B_AA = np.dot(np.linalg.inv(H), np.dot(Baa,H))
B_AB = np.dot(np.linalg.inv(H), np.dot(Bab,H))
B_BA = np.dot(np.linalg.inv(H), np.dot(Bba,H))
B_BB = np.dot(np.linalg.inv(H), np.dot(Bbb,H))
Bpnz = np.vstack((np.hstack((B_AA,B_AB)), np.hstack((B_BA,B_BB))))
The +ve, -ve and 0 seq. impedance can be determined in an exactly similar manner. The final output after all the above computations would be:
print 'Positive sequence resistance in ohms/km/ckt = ', np.real(Zp)
print 'Positive sequence reactance in ohms/km/ckt = ', np.imag(Zp)
print 'Positive sequence charging susceptance in microsiemens/km/ckt = ', np.real(Bp)
print 'Positive sequence resistance in percent/km/ckt = ', 100*np.real(Zp)/Zbase
print 'Positive sequence reactance in percent/km/ckt = ', 100*np.imag(Zp)/Zbase
print 'Positive sequence charging susceptance in percent/km/ckt = ', 100*(10**-6)*np.real(Bp)/Ybase
print 'Zero sequence resistance in ohms/km/ckt = ', np.real(Zz)
print 'Zero sequence reactance in ohms/km/ckt = ', np.imag(Zz)
print 'Zero sequence charging susceptance in microsiemens/km/ckt = ', np.real(Bz)
print 'Zero sequence resistance in percent/km/ckt = ', 100*np.real(Zz)/Zbase
print 'Zero sequence reactance in percent/km/ckt = ', 100*np.imag(Zz)/Zbase
print 'Zero sequence charging susceptance in percent/km/ckt = ', 100*(10**-6)*np.real(Bz)/Ybase
That completes the brute force method of determining line constants. Let me know if there are easier or more elegant ways of doing the above computations.
Form the potential co-efficient matrix.relocated to single answer
P = np.array([(P11, P12, P13, P14, P15, P16, P17, P18),
(P21, P22, P23, P24, P25, P26, P27, P28),
(P31, P32, P33, P34, P35, P36, P37, P38),
(P41, P42, P43, P44, P45, P46, P47, P48),
(P51, P52, P53, P54, P55, P56, P57, P58),
(P61, P62, P63, P64, P65, P66, P67, P68),
(P71, P72, P73, P74, P75, P76, P77, P78),
(P81, P82, P83, P84, P85, P86, P87, P88)])
Get the full phase capacitance matrix.
C = np.linalg.inv(P)
Determine the +ve, -ve and 0 seq. susceptances after eliminating the earth wires.
Paa = P[:3, :3]
Pab = P[:3, 3:6]
Pba = P[3:6, :3]
Pbb = P[3:6, 3:6]
Pas = P[:3, 6:]
Pbs = P[3:6, 6:]
Pss = P[6:, 6:]
P_AA = Paa-np.dot(Pas,np.dot(np.linalg.inv(Pss),Pas.T))
P_AB = Pab-np.dot(Pas,np.dot(np.linalg.inv(Pss),Pbs.T))
P_BA = Pba-np.dot(Pbs,np.dot(np.linalg.inv(Pss),Pas.T))
P_BB = Pbb-np.dot(Pbs,np.dot(np.linalg.inv(Pss),Pbs.T))
Pph = np.vstack((np.hstack((P_AA,P_AB)), np.hstack((P_BA,P_BB))))
Cph = np.linalg.inv(Pph)
Bph = 2*np.pi*f*Cph
Baa = Bph[:3, :3]
Bab = Bph[:3, 3:6]
Bba = Bph[3:6, :3]
Bbb = Bph[3:6, 3:6]
B_AA = np.dot(np.linalg.inv(H), np.dot(Baa,H))
B_AB = np.dot(np.linalg.inv(H), np.dot(Bab,H))
B_BA = np.dot(np.linalg.inv(H), np.dot(Bba,H))
B_BB = np.dot(np.linalg.inv(H), np.dot(Bbb,H))
Bpnz = np.vstack((np.hstack((B_AA,B_AB)), np.hstack((B_BA,B_BB))))
The +ve, -ve and 0 seq. impedance can be determined in an exactly similar manner. The final output after all the above computations would be:
print 'Positive sequence resistance in ohms/km/ckt = ', np.real(Zp)
print 'Positive sequence reactance in ohms/km/ckt = ', np.imag(Zp)
print 'Positive sequence charging susceptance in microsiemens/km/ckt = ', np.real(Bp)
print 'Positive sequence resistance in percent/km/ckt = ', 100*np.real(Zp)/Zbase
print 'Positive sequence reactance in percent/km/ckt = ', 100*np.imag(Zp)/Zbase
print 'Positive sequence charging susceptance in percent/km/ckt = ', 100*(10**-6)*np.real(Bp)/Ybase
print 'Zero sequence resistance in ohms/km/ckt = ', np.real(Zz)
print 'Zero sequence reactance in ohms/km/ckt = ', np.imag(Zz)
print 'Zero sequence charging susceptance in microsiemens/km/ckt = ', np.real(Bz)
print 'Zero sequence resistance in percent/km/ckt = ', 100*np.real(Zz)/Zbase
print 'Zero sequence reactance in percent/km/ckt = ', 100*np.imag(Zz)/Zbase
print 'Zero sequence charging susceptance in percent/km/ckt = ', 100*(10**-6)*np.real(Bz)/Ybase
That completes the brute force method of determining line constants. Let me know if there are easier or more elegant ways of doing the above computations.