First time here? We are a friendly community of Power Systems Engineers. Check out the FAQ!
1 | initial version |
Here is an article that discusses the measurement aspect and its relevance.
[http://www.pacw.org/en/issue/winter2008issue/line_constants.html?0=]
2 | No.2 Revision |
Here is an article that discusses the measurement aspect of line constants and its relevance.
[http://www.pacw.org/en/issue/winter2008issue/line_constants.html?0=]
3 | No.3 Revision |
Planning studies are generally based on calculated line constants. These are approximations. Calculations contain assumptions on soil resistivity, etc. that may not always be correct. Here is an article that discusses the measurement aspect of line constants and its relevance.
[http://www.pacw.org/en/issue/winter2008issue/line_constants.html?0=]
4 | No.4 Revision |
Planning studies are generally based on calculated line constants. These are approximations. Calculations contain assumptions on soil resistivity, etc. that may not always be correct. Here is an article that discusses the measurement aspect of line constants and its relevance.
[http://www.pacw.org/en/issue/winter2008issue/line_constants.html?0=]
5 | Combined answers into a single answer |
Planning studies are generally based on calculated line constants. Calculations contain assumptions on soil resistivity, etc. that may not always be correct. Here is an article that discusses the measurement aspect of line constants and its relevance.
[http://www.pacw.org/en/issue/winter2008issue/line_constants.html?0=]
Method to calculate line parameters
Here is a brute force method right out of the text books for calculating the line parameters of a 400KV transmission line.
The various steps in the calculation process are:
Average height of conductor bundle
Now compute the average height of each conductor bundle and its co-ordinates.
y1av = ya-(2./3.)*sagc
y2av = yb-(2./3.)*sagc
y3av = yc-(2./3.)*sagc
y4av = yf-(2./3.)*sagc
y5av = yg-(2./3.)*sagc
y6av = yh-(2./3.)*sagc
y7av = ye1-(2./3.)*sage
y8av = ye2-(2./3.)*sage
x1 = xa; xm1 = xa; ym1 = -y1av # co-ordinates of conductor a
x2 = xb; xm2 = xb; ym2 = -y2av # co-ordinates of conductor b
x3 = xc; xm3 = xc; ym3 = -y3av # co-ordinates of conductor c
x4 = xf; xm4 = xf; ym4 = -y4av # co-ordinates of conductor f
x5 = xg; xm5 = xg; ym5 = -y5av # co-ordinates of conductor g
x6 = xh; xm6 = xh; ym6 = -y6av # co-ordinates of conductor h
x7 = xe1; xm7 = xe1; ym7 = -y7av # co-odinates of earthwire 1
x8 = xe2; xm8 = xe2; ym8 = -y8av # co-odinates of earthwire 2
Tower Configuration Data
Next read in the tower configuration data:
xa = -7.545 # Distance between bundle a and tower center line
xb = -6.872 # Distance between bundle b and tower center line
xc = -6.510 # Distance between bundle c and tower center line
xf = 7.545 # Distance between bundle f and tower center line
xg = 6.872 # Distance between bundle g and tower center line
xh = 6.510 # Distance between bundle h and tower center line
xe1 = -3.756 # Distance between ew1 and tower center line
xe2 = 3.756 # Distance between ew2 and tower center line
ye1 = 42.068 # distance between earthwire and ground in meters
ye2 = 42.068 # distance between earthwire and ground in meters
ya = 21.835 # distance between bundle a and ground in meters
yb = 29.835 # distance between bundle b and ground in meters
yc = 37.835 # distance between bundle c and ground in meters
yf = 21.835 # distance between bundle f and ground in meters
yg = 29.835 # distance between bundle g and ground in meters
yh = 37.835 # distance between bundle h and ground in meters
We now have all the input data for our computation.
Spacing Calculations
Now perform the spacing calculations. Start off with the horizontal distances.
D12 = np.sqrt((x1-xm2)**2+(y1av-ym2)**2); # in meters
D21 = np.sqrt((x1-xm2)**2+(y1av-ym2)**2); # in meters
D13 = np.sqrt((x1-xm3)**2+(y1av-ym3)**2); # in meters
D31 = np.sqrt((x1-xm3)**2+(y1av-ym3)**2); # in meters
Similarly compute for D14 ... D81, D23 ... D82, D34 ... D83, D45 ... D84, D56 ... D85, D67 ... D87, D78, D87.
Then compute the vertical distances.
d12 = np.sqrt((x1-x2)**2+(y1av-y2av)**2); # in meters
d21 = np.sqrt((x1-x2)**2+(y1av-y2av)**2); # in meters
d13 = np.sqrt((x1-x3)**2+(y1av-y3av)**2); # in meters
d31 = np.sqrt((x1-x3)**2+(y1av-y3av)**2); # in meters
Similarly compute for d14 ... d81, d23 ... d82, d34 ... d83, d45 ... d84, d56 ... d85, d67 ... d87, d78, d87.
Calculate the Potential Coefficients.
P11 = 17.975109*math.log(2*y1av/GMrceq); # in km/microF
P22 = 17.975109*math.log(2*y2av/GMrceq); # in km/microF
P33 = 17.975109*math.log(2*y3av/GMrceq); # in km/microF
P44 = 17.975109*math.log(2*y4av/GMrceq); # in km/microF
P55 = 17.975109*math.log(2*y5av/GMrceq); # in km/microF
P66 = 17.975109*math.log(2*y6av/GMrceq); # in km/microF
P77 = 17.975109*math.log(2*y7av/GMre); # in km/microF
P88 = 17.975109*math.log(2*y8av/GMre); # in km/microF
P12 = 17.975109*math.log(D12/d12); # in km/microF
P21 = 17.975109*math.log(D12/d12); # in km/microF
Similarly compute for P13 ... P81, P23 ... P82, P34 ... P83, P45 ... P84, P56 ... P85, P67 ... P87, P78, P87.
Calculate the phase impedance
Z11 = (Rc/nb)+(np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*((1/(4*nb))+math.log(Derc/GMRceq));
Z22 = Z11; Z33 = Z11; Z44 = Z11; Z55 = Z11; Z66 = Z11;
Z77 = Re+(np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*((1/4)+math.log(Derc/GMRe));
Z88 = Z77;
Z12 = (np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*math.log(Derc/d12);
Z21 = (np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*math.log(Derc/d12);
Similarly compute for Z13 ... Z81, Z23 ... Z82, Z34 ... Z83, Z45 ... Z84, Z56 ... Z85, Z67 ... Z87, Z78, Z87.
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.
Next calculate the various constants
A = dcs/(2.*np.sin(np.pi/nb)) # radius of a circle through the center of the bundled conductors in meters
GMrc = radc # radius of conductor in meters
GMRc = kc*radc
GMre = rade
GMRe = ke*rade # radius of earthwire in meters
GMrceq = (nb*GMrc*A**(nb-1.))**(1./nb) # GMR of equivalent conductor in meters
GMRceq = (nb*GMRc*A**(nb-1.))**(1./nb) # GMR of equivalent conductor in meters
Derc = 658.87*np.sqrt(rho/f)
h = np.e**(2j*np.pi/3)
H = np.array([(1, 1, 1),
(h**2, h, 1),
(h, h**2, 1)])
6 | No.6 Revision |
Planning studies are generally based on calculated line constants. Calculations contain assumptions on soil resistivity, etc. that may not always be correct. Here is an article that discusses the measurement aspect of line constants and its relevance.
[http://www.pacw.org/en/issue/winter2008issue/line_constants.html?0=]
Method to calculate line parameters
Here is a brute force method right out of the text books for calculating the line parameters of a 400KV transmission line.
The various steps in the calculation process are:
Average height of conductor bundle
Now compute the average height of each conductor bundle and its co-ordinates.
y1av = ya-(2./3.)*sagc
y2av = yb-(2./3.)*sagc
y3av = yc-(2./3.)*sagc
y4av = yf-(2./3.)*sagc
y5av = yg-(2./3.)*sagc
y6av = yh-(2./3.)*sagc
y7av = ye1-(2./3.)*sage
y8av = ye2-(2./3.)*sage
x1 = xa; xm1 = xa; ym1 = -y1av # co-ordinates of conductor a
x2 = xb; xm2 = xb; ym2 = -y2av # co-ordinates of conductor b
x3 = xc; xm3 = xc; ym3 = -y3av # co-ordinates of conductor c
x4 = xf; xm4 = xf; ym4 = -y4av # co-ordinates of conductor f
x5 = xg; xm5 = xg; ym5 = -y5av # co-ordinates of conductor g
x6 = xh; xm6 = xh; ym6 = -y6av # co-ordinates of conductor h
x7 = xe1; xm7 = xe1; ym7 = -y7av # co-odinates of earthwire 1
x8 = xe2; xm8 = xe2; ym8 = -y8av # co-odinates of earthwire 2
Next read in the tower configuration data: Tower Configuration Data
Next read in the tower configuration data:
xa = -7.545 # Distance between bundle a and tower center line
xb = -6.872 # Distance between bundle b and tower center line
xc = -6.510 # Distance between bundle c and tower center line
xf = 7.545 # Distance between bundle f and tower center line
xg = 6.872 # Distance between bundle g and tower center line
xh = 6.510 # Distance between bundle h and tower center line
xe1 = -3.756 # Distance between ew1 and tower center line
xe2 = 3.756 # Distance between ew2 and tower center line
ye1 = 42.068 # distance between earthwire and ground in meters
ye2 = 42.068 # distance between earthwire and ground in meters
ya = 21.835 # distance between bundle a and ground in meters
yb = 29.835 # distance between bundle b and ground in meters
yc = 37.835 # distance between bundle c and ground in meters
yf = 21.835 # distance between bundle f and ground in meters
yg = 29.835 # distance between bundle g and ground in meters
yh = 37.835 # distance between bundle h and ground in meters
We now have all the input data for our computation.
Next calculate the various constants
A = dcs/(2.*np.sin(np.pi/nb)) # radius of a circle through the center of the bundled conductors in meters
GMrc = radc # radius of conductor in meters
GMRc = kc*radc
GMre = rade
GMRe = ke*rade # radius of earthwire in meters
GMrceq = (nb*GMrc*A**(nb-1.))**(1./nb) # GMR of equivalent conductor in meters
GMRceq = (nb*GMRc*A**(nb-1.))**(1./nb) # GMR of equivalent conductor in meters
Derc = 658.87*np.sqrt(rho/f)
h = np.e**(2j*np.pi/3)
H = np.array([(1, 1, 1),
(h**2, h, 1),
(h, h**2, 1)])
Average height of conductor bundle
Now compute the average height of each conductor bundle and its co-ordinates.
y1av = ya-(2./3.)*sagc
y2av = yb-(2./3.)*sagc
y3av = yc-(2./3.)*sagc
y4av = yf-(2./3.)*sagc
y5av = yg-(2./3.)*sagc
y6av = yh-(2./3.)*sagc
y7av = ye1-(2./3.)*sage
y8av = ye2-(2./3.)*sage
x1 = xa; xm1 = xa; ym1 = -y1av # co-ordinates of conductor a
x2 = xb; xm2 = xb; ym2 = -y2av # co-ordinates of conductor b
x3 = xc; xm3 = xc; ym3 = -y3av # co-ordinates of conductor c
x4 = xf; xm4 = xf; ym4 = -y4av # co-ordinates of conductor f
x5 = xg; xm5 = xg; ym5 = -y5av # co-ordinates of conductor g
x6 = xh; xm6 = xh; ym6 = -y6av # co-ordinates of conductor h
x7 = xe1; xm7 = xe1; ym7 = -y7av # co-odinates of earthwire 1
x8 = xe2; xm8 = xe2; ym8 = -y8av # co-odinates of earthwire 2
Spacing Calculations
Now perform the spacing calculations. Start off with the horizontal distances.
D12 = np.sqrt((x1-xm2)**2+(y1av-ym2)**2); # in meters
D21 = np.sqrt((x1-xm2)**2+(y1av-ym2)**2); # in meters
D13 = np.sqrt((x1-xm3)**2+(y1av-ym3)**2); # in meters
D31 = np.sqrt((x1-xm3)**2+(y1av-ym3)**2); # in meters
Similarly compute for D14 ... D81, D23 ... D82, D34 ... D83, D45 ... D84, D56 ... D85, D67 ... D87, D78, D87.
Then compute the vertical distances.
d12 = np.sqrt((x1-x2)**2+(y1av-y2av)**2); # in meters
d21 = np.sqrt((x1-x2)**2+(y1av-y2av)**2); # in meters
d13 = np.sqrt((x1-x3)**2+(y1av-y3av)**2); # in meters
d31 = np.sqrt((x1-x3)**2+(y1av-y3av)**2); # in meters
Similarly compute for d14 ... d81, d23 ... d82, d34 ... d83, d45 ... d84, d56 ... d85, d67 ... d87, d78, d87.
Calculate the Potential Coefficients.
P11 = 17.975109*math.log(2*y1av/GMrceq); # in km/microF
P22 = 17.975109*math.log(2*y2av/GMrceq); # in km/microF
P33 = 17.975109*math.log(2*y3av/GMrceq); # in km/microF
P44 = 17.975109*math.log(2*y4av/GMrceq); # in km/microF
P55 = 17.975109*math.log(2*y5av/GMrceq); # in km/microF
P66 = 17.975109*math.log(2*y6av/GMrceq); # in km/microF
P77 = 17.975109*math.log(2*y7av/GMre); # in km/microF
P88 = 17.975109*math.log(2*y8av/GMre); # in km/microF
P12 = 17.975109*math.log(D12/d12); # in km/microF
P21 = 17.975109*math.log(D12/d12); # in km/microF
Similarly compute for P13 ... P81, P23 ... P82, P34 ... P83, P45 ... P84, P56 ... P85, P67 ... P87, P78, P87.
Calculate the phase impedance
Z11 = (Rc/nb)+(np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*((1/(4*nb))+math.log(Derc/GMRceq));
Z22 = Z11; Z33 = Z11; Z44 = Z11; Z55 = Z11; Z66 = Z11;
Z77 = Re+(np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*((1/4)+math.log(Derc/GMRe));
Z88 = Z77;
Z12 = (np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*math.log(Derc/d12);
Z21 = (np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*math.log(Derc/d12);
Similarly compute for Z13 ... Z81, Z23 ... Z82, Z34 ... Z83, Z45 ... Z84, Z56 ... Z85, Z67 ... Z87, Z78, Z87.
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.
Next calculate the various constants
A = dcs/(2.*np.sin(np.pi/nb)) # radius of a circle through the center of the bundled conductors in meters
GMrc = radc # radius of conductor in meters
GMRc = kc*radc
GMre = rade
GMRe = ke*rade # radius of earthwire in meters
GMrceq = (nb*GMrc*A**(nb-1.))**(1./nb) # GMR of equivalent conductor in meters
GMRceq = (nb*GMRc*A**(nb-1.))**(1./nb) # GMR of equivalent conductor in meters
Derc = 658.87*np.sqrt(rho/f)
h = np.e**(2j*np.pi/3)
H = np.array([(1, 1, 1),
(h**2, h, 1),
(h, h**2, 1)])
7 | No.7 Revision |
Planning studies are generally based on calculated line constants. Calculations contain assumptions on soil resistivity, etc. that may not always be correct. Here is an article that discusses the measurement aspect of line constants and its relevance.
[http://www.pacw.org/en/issue/winter2008issue/line_constants.html?0=]
Method to calculate line parameters
Here is a brute force method right out of the text books for calculating the line parameters of a 400KV transmission line.
The various steps in the calculation process are:
First read in the conductor and tower data as follows:
Cond = 'ACSR 54/7/3.53'
Ew = 'GS 7/3.66'
nc = 2. # number of circuits
nb = 4. # number of conductors in bundle
ne = 2. # number of earthwires
f = 50. # frequency in Hertz
V = 400. # base voltage in kV
S = 100. # base MVA
radc = 0.015885 # conductor radius in meters
Rc = 0.0556 # conductor dc resistance at 20 degC in ohms/km
rade = 0.004725 # earthwire radius in meters
Re = 2.5 # earthwire resistance in ohms/km
rho = 169.84 # earth resistivity in ohm-meter
sagc = 13.262 # average sag of conductor
sage = 10.199 # average sag of earthwire
dcs = 0.457 # sub-conductor spacing
kc = 0.81 # stranding factor of conductor
ke = 0.726 # stranding factor of earthwire
The main point to note here is the conductor resistance. I have used a dc resistance value but AC resistance ought to be used in actual practice.
Next read in the tower configuration data:
Tower Configuration Data
xa = -7.545 # Distance between bundle a and tower center line
xb = -6.872 # Distance between bundle b and tower center line
xc = -6.510 # Distance between bundle c and tower center line
xf = 7.545 # Distance between bundle f and tower center line
xg = 6.872 # Distance between bundle g and tower center line
xh = 6.510 # Distance between bundle h and tower center line
xe1 = -3.756 # Distance between ew1 and tower center line
xe2 = 3.756 # Distance between ew2 and tower center line
ye1 = 42.068 # distance between earthwire and ground in meters
ye2 = 42.068 # distance between earthwire and ground in meters
ya = 21.835 # distance between bundle a and ground in meters
yb = 29.835 # distance between bundle b and ground in meters
yc = 37.835 # distance between bundle c and ground in meters
yf = 21.835 # distance between bundle f and ground in meters
yg = 29.835 # distance between bundle g and ground in meters
yh = 37.835 # distance between bundle h and ground in meters
We now have all the input data for our computation.
Next calculate the various constants
A = dcs/(2.*np.sin(np.pi/nb)) # radius of a circle through the center of the bundled conductors in meters
GMrc = radc # radius of conductor in meters
GMRc = kc*radc
GMre = rade
GMRe = ke*rade # radius of earthwire in meters
GMrceq = (nb*GMrc*A**(nb-1.))**(1./nb) # GMR of equivalent conductor in meters
GMRceq = (nb*GMRc*A**(nb-1.))**(1./nb) # GMR of equivalent conductor in meters
Derc = 658.87*np.sqrt(rho/f)
h = np.e**(2j*np.pi/3)
H = np.array([(1, 1, 1),
(h**2, h, 1),
(h, h**2, 1)])
Average height of conductor bundle
Now compute the average height of each conductor bundle and its co-ordinates.
y1av = ya-(2./3.)*sagc
y2av = yb-(2./3.)*sagc
y3av = yc-(2./3.)*sagc
y4av = yf-(2./3.)*sagc
y5av = yg-(2./3.)*sagc
y6av = yh-(2./3.)*sagc
y7av = ye1-(2./3.)*sage
y8av = ye2-(2./3.)*sage
x1 = xa; xm1 = xa; ym1 = -y1av # co-ordinates of conductor a
x2 = xb; xm2 = xb; ym2 = -y2av # co-ordinates of conductor b
x3 = xc; xm3 = xc; ym3 = -y3av # co-ordinates of conductor c
x4 = xf; xm4 = xf; ym4 = -y4av # co-ordinates of conductor f
x5 = xg; xm5 = xg; ym5 = -y5av # co-ordinates of conductor g
x6 = xh; xm6 = xh; ym6 = -y6av # co-ordinates of conductor h
x7 = xe1; xm7 = xe1; ym7 = -y7av # co-odinates of earthwire 1
x8 = xe2; xm8 = xe2; ym8 = -y8av # co-odinates of earthwire 2
Spacing Calculations
Now perform the spacing calculations. Start off with the horizontal distances.
D12 = np.sqrt((x1-xm2)**2+(y1av-ym2)**2); # in meters
D21 = np.sqrt((x1-xm2)**2+(y1av-ym2)**2); # in meters
D13 = np.sqrt((x1-xm3)**2+(y1av-ym3)**2); # in meters
D31 = np.sqrt((x1-xm3)**2+(y1av-ym3)**2); # in meters
Similarly compute for D14 ... D81, D23 ... D82, D34 ... D83, D45 ... D84, D56 ... D85, D67 ... D87, D78, D87.
Then compute the vertical distances.
d12 = np.sqrt((x1-x2)**2+(y1av-y2av)**2); # in meters
d21 = np.sqrt((x1-x2)**2+(y1av-y2av)**2); # in meters
d13 = np.sqrt((x1-x3)**2+(y1av-y3av)**2); # in meters
d31 = np.sqrt((x1-x3)**2+(y1av-y3av)**2); # in meters
Similarly compute for d14 ... d81, d23 ... d82, d34 ... d83, d45 ... d84, d56 ... d85, d67 ... d87, d78, d87.
Calculate the Potential Coefficients.
P11 = 17.975109*math.log(2*y1av/GMrceq); # in km/microF
P22 = 17.975109*math.log(2*y2av/GMrceq); # in km/microF
P33 = 17.975109*math.log(2*y3av/GMrceq); # in km/microF
P44 = 17.975109*math.log(2*y4av/GMrceq); # in km/microF
P55 = 17.975109*math.log(2*y5av/GMrceq); # in km/microF
P66 = 17.975109*math.log(2*y6av/GMrceq); # in km/microF
P77 = 17.975109*math.log(2*y7av/GMre); # in km/microF
P88 = 17.975109*math.log(2*y8av/GMre); # in km/microF
P12 = 17.975109*math.log(D12/d12); # in km/microF
P21 = 17.975109*math.log(D12/d12); # in km/microF
Similarly compute for P13 ... P81, P23 ... P82, P34 ... P83, P45 ... P84, P56 ... P85, P67 ... P87, P78, P87.
Calculate the phase impedance
Z11 = (Rc/nb)+(np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*((1/(4*nb))+math.log(Derc/GMRceq));
Z22 = Z11; Z33 = Z11; Z44 = Z11; Z55 = Z11; Z66 = Z11;
Z77 = Re+(np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*((1/4)+math.log(Derc/GMRe));
Z88 = Z77;
Z12 = (np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*math.log(Derc/d12);
Z21 = (np.pi**2)*(10**-4)*f+4j*np.pi*(10**-4)*f*math.log(Derc/d12);
Similarly compute for Z13 ... Z81, Z23 ... Z82, Z34 ... Z83, Z45 ... Z84, Z56 ... Z85, Z67 ... Z87, Z78, Z87.
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.