Ask Your Question

Revision history [back]

click to hide/show revision 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=]

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=]

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=]

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=]

click to hide/show revision 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:

  1. Read the conductor and tower configuration data.
  2. Determine the various constants (GMR, GMD, etc) required for further processing of the data.
  3. Perform all spacing calculations
  4. Determine the potential co-efficient values and and form the potential co-efficient matrix.
  5. Invert to form capacitance matrix
  6. Extract the +ve seq., -ve seq. and zero seq. susceptance.
  7. Determine the various phase impedance.
  8. Form the impedance matrix.
  9. Extract the resistance and seq. reactance.

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)])

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:

  1. Read the conductor and tower configuration data.
  2. Determine the various constants (GMR, GMD, etc) required for further processing of the data.
  3. Perform all spacing calculations
  4. Determine the potential co-efficient values and and form the potential co-efficient matrix.
  5. Invert to form capacitance matrix
  6. Extract the +ve seq., -ve seq. and zero seq. susceptance.
  7. Determine the various phase impedance.
  8. Form the impedance matrix.
  9. Extract the resistance and seq. reactance.

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)])

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:

  1. Read the conductor and tower configuration data.
  2. Determine the various constants (GMR, GMD, etc) required for further processing of the data.
  3. Perform all spacing calculations
  4. Determine the potential co-efficient values and and form the potential co-efficient matrix.
  5. Invert to form capacitance matrix
  6. Extract the +ve seq., -ve seq. and zero seq. susceptance.
  7. Determine the various phase impedance.
  8. Form the impedance matrix.
  9. Extract the resistance and seq. reactance.

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.