Step by Step SPE Sag and Tension Iteration

Important notice: This post is provided for educational and reference purposes only. Results must be independently verified by a licensed engineer before use in any design or construction activity. engineeringstuffs.com and its contributors accept no liability for errors, omissions, or consequences arising from use of this content.

In the SPE / Linear Elongation post I said the catenary-modulus system has to be “solved simultaneously” and then just handed you the answer. That’s fine if you trust the calculator, but it’s not much help if you want to build your own spreadsheet — you need to see the actual convergence, not just the final number. That’s what this post is: the same Drake ACSR example, but with every iteration shown.

The method here — bisection — is deliberately the least clever option available. Newton-Raphson converges faster, but it needs a derivative and is easy to get subtly wrong in a spreadsheet. Bisection needs nothing but the residual itself, which is exactly what Excel’s Goal Seek does internally. If you’ve ever used Goal Seek on a sag-tension formula, this is what it was doing behind the scenes.

The Case We’re Solving

Same conductor and span as the SPE post: Drake 795 kcmil 26/7 ACSR, 300 m level span, strung at 48 MPa (22,495 N) at 15°C, SPE model with PC = 600 µε. We’ll converge on the Final/Creep condition at 100°C — the published answer was H = 15,695 N, D = 11.467 m. That’s the number we’re about to derive from scratch, iteration by iteration.

QuantityValue
Area A468.644 mm²
Unit weight w₀15.9657 N/m
Composite α0.001882 %/°C
Composite E (true)69,637 MPa
T_REF21.1111 °C
LREF (zero-stress, at T_REF)300.3945 m
LREF, Final/Creep (PC=600µε applied)300.5748 m
Target temperature T100 °C

The Two Equations That Have to Agree

Sag-tension iteration exists because two independent descriptions of the conductor’s length have to land on the same number, and only one of them is easy to invert.

Equation 1 — the catenary. Given a horizontal tension H, the physical arc length of a hanging conductor is:

Lcat(H) = (2H / w) × sinh(wS / 2H)

Equation 2 — the stress-strain law. Given the same H, the conductor also stretches elastically from its temperature-adjusted unstressed length:

Ltarget(H) = LREFeff(T) × ( 1 + (H/A) / Etrue )
LREFeff(T) = LREFCreep × ( 1 + α_comp × (T − TR) / 100 ) = 300.5748 × ( 1 + 0.001882 × (100 − 21.1111) / 100 ) = 301.0210 m

Both equations describe the same physical length, so at the correct H, Lcat(H) = Ltarget(H). The problem is that Lcat(H) can’t be algebraically rearranged to isolate H — it’s transcendental. So instead of solving for H directly, we guess an H, compute both sides, and adjust the guess based on which side is bigger.

Setting Up the Bisection

Define the residual as the difference between the two lengths:

f(H) = Lcat(H) − Ltarget(H)

We want the H where f(H) = 0. Bisection needs a starting bracket — two values of H where f(H) has opposite signs, guaranteeing a root lies between them (this is just the Intermediate Value Theorem). Any physically reasonable tension range works as a starting bracket; we don’t need to be clever about it, just wide enough to be safe:

Hlo = 5,000 N    Hhi = 40,000 N

Each iteration: evaluate f at the midpoint, then replace whichever bound has the same sign as the midpoint with the midpoint itself. The bracket halves every time — that’s the entire method.

The Actual Convergence, Iteration by Iteration

Here’s every step, computed exactly as you’d lay it out in an Excel row-by-row bisection table. Ltarget is recomputed at every Hmid because it depends on H through the elastic strain term:

IterH_lo (N)H_hi (N)H_mid (N) L_cat(H_mid)L_target(H_mid)Residual f(H_mid)
15,000.040,000.022,500.0300.56677301.22816−0.66139
25,000.022,500.013,750.0301.51908301.14760+0.37149
313,750.022,500.018,125.0300.87368301.18788−0.31420
413,750.018,125.015,937.5301.13026301.16774−0.03748
513,750.015,937.514,843.8301.30319301.15767+0.14552
614,843.815,937.515,390.6301.21211301.16270+0.04940
715,390.615,937.515,664.1301.17011301.16522+0.00489
815,664.115,937.515,800.8301.14993301.16648−0.01655
915,664.115,800.815,732.4301.15995301.16585−0.00590
1015,664.115,732.415,698.2301.16502301.16554−0.00052
1115,664.115,698.215,681.2301.16756301.16538+0.00218
1215,681.215,698.215,689.7301.16629301.16546+0.00083
1315,689.715,698.215,694.0301.16565301.16550+0.00015
1415,694.015,698.215,696.1301.16533301.16552−0.00018
15Converged15,695.0301.16549301.16551−0.00002
H after 15 iterations15,695.0 N
Sag at converged H11.466 m
Published SPE post resultH = 15,695 N, D = 11.467 m ✓

Fifteen iterations to converge to within 0.02 mm of the arc length — from a bracket that started 35,000 N wide. That’s the trade-off with bisection: it’s foolproof, but every iteration only halves the error. Fifteen rows in a spreadsheet is nothing, so for a one-off hand calculation this is genuinely the easiest method to trust.

Why the bracket keeps changing on both ends: Notice the bracket doesn’t shrink from one side only — Lcat(H) is a decreasing function of H (higher tension pulls the conductor straighter, shortening the arc), while Ltarget(H) is slowly increasing in H (more tension means more elastic stretch). Whichever bound produced a residual with the same sign as the midpoint gets replaced — sometimes that’s H_lo, sometimes H_hi, which is why you see both columns move throughout the table.

A Combined Ice + Wind Case, By Hand

Every case so far has been bare wire — no ice, no wind, so the load per unit length is just w₀. Real weather cases aren’t that simple, and the load itself has to be built up from three separate pieces before you can even set up the H-solve. Let’s do that here for NESC 250B — Heavy District Loading: T = −18°C, 1.27 cm radial ice, 191.5 Pa wind pressure, NESC constant k = 4.38 N/m.

Ice load

Ice adds a weight per unit length based on the ice’s own cross-sectional area (an annulus of thickness t around the bare conductor) and its density:

wice = ρice × π × t × (D + t) = 8796.9 × π × 0.0127 × (0.0281432 + 0.0127) = 14.335 N/m

D here is the bare conductor diameter (28.1432 mm), t is radial ice thickness (12.7 mm). The (D+t) term is the mean diameter of the ice annulus — this is the standard thin-ring approximation, not an exact area integral, but it’s what every sag-tension tool including PLS-CADD uses.

Wind load

Wind pushes on the iced conductor’s projected diameter, so the ice thickness shows up here too — this time as 2t since wind sees the full diameter, not the radius:

wwind = Cd × Pwind × (D + 2t) = 1.0 × 191.5 × (0.0281432 + 0.0254) = 10.254 N/m

Resultant load and the NESC k constant

The vertical component is the bare conductor weight plus the ice weight. The wind load acts horizontally. These combine as a vector:

wv = w₀ + wice = 15.9657 + 14.335 = 30.301 N/m
wphys = √(wv² + wwind²) = √(30.301² + 10.254²) = 31.989 N/m

NESC Rule 250B then adds a constant k directly to this resultant — not as a vector, just a flat addition — to build in a safety margin against gust loading that isn’t otherwise captured:

wtotal = wphys + k = 31.989 + 4.38 = 36.369 N/m
Check: this matches the “w N/m” column for NESC 250B in the calculator’s own weather-case table exactly (36.37 N/m) — good confirmation the hand math above is tracking the actual implementation.

Solving for H under the combined load

Same bisection method as before, just with wtotal in place of w₀ in the catenary equation, and using the Final/Load condition — creep-shifted LREF (PC=600µε applied), evaluated at T=−18°C:

IterH_lo (N)H_hi (N)H_mid (N)Residual
110,000.090,000.050,000.0−0.21728
210,000.050,000.030,000.0+1.02699
330,000.050,000.040,000.0+0.20991
440,000.050,000.045,000.0−0.03154
540,000.045,000.042,500.0+0.08056
642,500.045,000.043,750.0+0.02260
743,750.045,000.044,375.0−0.00492
843,750.044,375.044,062.5+0.00872
944,062.544,375.044,218.8+0.00187
1044,218.844,375.044,296.9−0.00154
11Converged44,257.8+0.00017

Slant sag, slant angle, and vertical sag

The catenary equation always gives sag in the plane the conductor actually hangs in — under wind, that plane is tilted away from vertical, so this is a slant sag, not the vertical clearance value you actually need for ground clearance checks:

Dslant = (H / wtotal) × ( cosh(wtotalS / 2H) − 1 ) = 9.256 m

To get the true vertical sag, you need the angle the conductor has physically swung away from vertical. This angle comes only from the real physical forces — critically, the NESC k constant is excluded here, since k is a fictitious safety-margin load with no physical direction, not an actual force vector:

θ = atan(wwind / wv) = atan(10.254 / 30.301) = 18.70°
Dvert = Dslant × cos(θ) = 9.256 × cos(18.70°) = 8.767 m
Why exclude k from the angle: k only affects tension (it makes the conductor pull tighter, as a conservative safety margin) — it doesn’t represent a real load pushing the conductor sideways or down. Including it in the swing-angle calculation would rotate the sag plane by an angle that has no physical basis, distorting the vertical sag result.

Replicating This in Excel

You don’t need to hand-build the bisection table above to check your own spreadsheet — that’s what Goal Seek automates. Set it up like this:

  • One cell for H (your changing/guess cell).
  • One formula cell computing L_cat(H) − L_target(H) exactly as defined above, referencing the H cell.
  • Data → What-If Analysis → Goal Seek: set the residual cell to 0, by changing the H cell.

Excel’s Goal Seek uses essentially the same bracket-and-narrow logic (technically a secant-method variant, which is why it usually converges in far fewer than 15 steps) — but the underlying idea is identical to what’s in the table above. If you want to see it iteration-by-iteration the way this post does, build the bisection table manually with a fixed starting bracket and a formula row you drag down — that reproduces the table exactly.

For repeated calculations (a full weather-case table, multiple spans), a manual Newton-Raphson setup converges in 4–6 iterations instead of 15, using the derivative dLcat/dH. That’s a heavier setup for a one-off spreadsheet check, though — worth it only if you’re running this across many rows and want the calculation to feel snappy.

What’s Next

Back to the SPE / Linear Elongation post for the full model comparison and the interactive calculator, or ahead to the ruling span post — the next post in the series — for how this single-span math extends to a full line section.

Questions or corrections? Drop a comment below.

References

  1. CIGRE Working Group B2-12, Sag-Tension Calculation Methods for Overhead Lines, Technical Brochure 324, CIGRE, Paris, June 2007.
  2. Power Line Systems, PLS-CADD Version 21.00 User’s Manual, §9.1, Power Line Systems Inc., Madison WI, 2025.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *