First time here? We are a friendly community of Power Systems Engineers. Check out the FAQ!
1 | initial version |
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.
2 | relocated to single answer |
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.