<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Pavel Barysenka: Catenary Engineering]]></title><description><![CDATA[Overhead contact system (OCS) design step by step: wire mechanics, sag and tension calculations, Civil 3D and Dynamo automation. Free Excel files.]]></description><link>https://pavelbarysenka.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ad6959b6cdc3c187829e973/649ad25d-496c-403d-a8b9-5d186848a1af.png</url><title>Pavel Barysenka: Catenary Engineering</title><link>https://pavelbarysenka.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Fri, 30 Oct 2026 08:37:32 GMT</lastBuildDate><atom:link href="https://pavelbarysenka.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[State Equation of a Freely Suspended Wire]]></title><description><![CDATA[State equation of an overhead wire: derivation, governing load case, critical span and a 243-AL1 stringing table in Excel, with a free workbook.]]></description><link>https://pavelbarysenka.hashnode.dev/state-equation-of-a-freely-suspended-wire</link><guid isPermaLink="true">https://pavelbarysenka.hashnode.dev/state-equation-of-a-freely-suspended-wire</guid><category><![CDATA[catenary]]></category><category><![CDATA[OHLE]]></category><category><![CDATA[wire-mechanics]]></category><category><![CDATA[sag-calculation]]></category><category><![CDATA[excel]]></category><category><![CDATA[ohl]]></category><dc:creator><![CDATA[Pavel Barysenka]]></dc:creator><pubDate>Wed, 28 Oct 2026 21:33:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/c2f5c606-7aa0-4355-928f-03d42c220cbf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Intro</h2>
<p>At -30°C a 100 m span of 243-AL1 pulled to 20 kN hangs 0.41 m. At +40°C the same wire in the same clamps sags 1.47 m, and its tension has dropped to 5.6 kN. Nobody touched the wire in between. The two states are linked by a single equation, and every stringing table is built on it.</p>
<p>This is the first part of the series Mechanics of a Freely Suspended Wire. It covers the state equation of a wire, the choice of the governing load case through the critical span, and a stringing table for 243-AL1 solved in Excel. The next parts build on it: the equivalent span for tension sections with many spans, composite and stranded conductors, and the exact shape of the sag curve.</p>
<h2>1. The Wire as a Flexible String</h2>
<p>A wire in an overhead line is essentially a tensioned rod supported at several points and bending under the force of gravity. How we calculate it depends on its length and stiffness. The length is set by the distance between the supports. The stiffness depends on the material, the cross-section and the construction (solid or stranded).</p>
<p>A short and stiff rod behaves like a beam, and structural mechanics applies in full. As the span grows, stiffness matters less and less. For the shape of the sag curve the wire can be treated as a perfectly flexible string, with zero bending moment in every section. For overhead line spans this introduces no significant error.</p>
<p>The same assumption holds for the tension, except near concentrated loads, where bending becomes noticeable. In a freely suspended wire the only concentrated loads are the support reactions. So in everything below the wire is a flexible string.</p>
<h2>2. Horizontal Component of Tension</h2>
<p>Take a uniform, perfectly flexible wire with a constant cross-section, suspended between two supports under a uniformly distributed load \({q}\) (N/m). The load can be the self weight, ice, wind, or their resultant.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/9bacd0eb-c967-45ca-8d37-e073000a83a9.png" alt="Level span with the support reactions and tension components" style="display:block;margin:0 auto" />

<p><em>Level span: at each support the tension T splits into the horizontal component H and the vertical reaction R</em></p>
<p>Now isolate a small element \({dL}\). The neighboring parts of the wire act on it with the tensions \({T}\) and \(T_{1}\), both tangent to the wire. The external force on the element is \(dQ = q \cdot dL\).</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/bce90c62-3801-4c8d-964a-0211e99e420c.png" alt="Element dL of a flexible wire with tensions T and T1" style="display:block;margin:0 auto" />

<p><em>Element of a flexible wire of length dL</em></p>
<p>The load acts vertically, so the horizontal forces on the element must balance:</p>
<p>$$T \cos\alpha = T_{1} \cos(\alpha + d\alpha) = H$$</p>
<p>where \(d\alpha\) is the change of the angle \(\alpha\) over the length \({dx}\), and \({H}\) is the horizontal component of the tension.</p>
<p>The horizontal component is the same along the whole wire. The total tension changes only through its vertical component. At the lowest point the wire is horizontal (\(\cos\alpha = 1\)), so \(T = H\) there, and \({T &gt; H}\) everywhere else. The largest tension acts at the support with the larger vertical reaction (\(R_{A}\) or \(R_{B}\)).</p>
<p>In a level span the tension at the support is \(T = H + q \cdot f\), where \({f}\) is the sag, so \(T/H = 1 + 8 (f/l)^{2}\). A sag of 5% of the span gives only 2%. For the 100 m span from the intro at -30°C it is 0.01%. This is why in practice the tension along the wire is taken as constant:</p>
<p>$$T \approx H$$</p>
<p>Overhead line conductors and catenary wires are designed for the tension at the lowest point of the sag curve, that is, for \({H}\).</p>
<h2>3. State Equation of a Wire</h2>
<p>When the temperature or the load changes, the wire changes its length, and with it the sag and the tension. If we know the tension in one state, we need to find it in another. The equation that links the two is the state equation of the wire.</p>
<p>Take a single span of length \({l}\) with supports at the same level. Notation:</p>
<ul>
<li>\(t_{1}\), \(q_{1}\), \(H_{1}\): temperature, resulting load and horizontal tension in the known state 1;</li>
<li>\(t_{i}\), \(q_{i}\), \(H_{i}\): the same values in the state \({i}\) we are looking for;</li>
<li>\(\alpha\): coefficient of linear expansion of the wire;</li>
<li>\({E}\): modulus of elasticity of the wire;</li>
<li>\({A}\): cross-sectional area of the wire.</li>
</ul>
<p>For a shallow sag the curve is close to a parabola, and the length of the wire in the span is</p>
<p>$$L = l + \frac{q^{2} l^{3}}{24 H^{2}}$$</p>
<p>Between states 1 and \({i}\) this geometric length changes by</p>
<p>$$L_{i} - L_{1} = \frac{q_{i}^{2} l^{3}}{24 H_{i}^{2}} - \frac{q_{1}^{2} l^{3}}{24 H_{1}^{2}}$$</p>
<p>The wire itself has to provide this change: it expands with temperature and stretches elastically with tension. Since \({L}\) differs from \({l}\) by a fraction of a percent, we can write</p>
<p>$$L_{i} - L_{1} = \alpha (t_{i} - t_{1}) \cdot l + \frac{H_{i} - H_{1}}{EA} \cdot l$$</p>
<p>Equating both expressions and dividing by \({l}\) gives the state equation:</p>
<p>$$\frac{q_{i}^{2} l^{2}}{24 H_{i}^{2}} - \frac{q_{1}^{2} l^{2}}{24 H_{1}^{2}} = \alpha (t_{i} - t_{1}) + \frac{H_{i} - H_{1}}{EA}$$</p>
<p>With the temperature and the load of state \({i}\) known, the only unknown is \(H_{i}\). Multiplied by \(EA \cdot H_{i}^{2}\), the equation becomes a cubic:</p>
<p>$$H_{i}^{2} (H_{i} - K) = \frac{q_{i}^{2} l^{2} EA}{24}, \qquad K = H_{1} - \frac{q_{1}^{2} l^{2} EA}{24 H_{1}^{2}} - \alpha EA (t_{i} - t_{1})$$</p>
<p>The right side is positive, so the equation has exactly one positive root with \(H_{i} &gt; K\). It can be solved in closed form, but in a spreadsheet an iterative solver is simpler. The sag then follows from \(f = q_{i} l^{2} / 8 H_{i}\).</p>
<h2>4. Which State Governs: Cold or Ice</h2>
<p>To use the state equation we need one state where the tension is known. In design this is the state with the highest tension: there we set \(H_{1}\) equal to the maximum permissible tension \(H_{max}\), and every other state follows from it.</p>
<p>The tension grows in two cases: when the temperature drops and when ice adds load. If the climate data showed both at once, that combination would be the design state. In practice the lowest temperatures rarely come with ice, so we cannot say in advance which of the two gives the higher tension. The answer depends on the span. Divide the state equation by \(l^{2}\):</p>
<p>$$\frac{q_{i}^{2}}{24 H_{i}^{2}} - \frac{q_{1}^{2}}{24 H_{1}^{2}} = \frac{1}{l^{2}} \left( \alpha (t_{i} - t_{1}) + \frac{H_{i} - H_{1}}{EA} \right)$$</p>
<p><strong>In a short span</strong> the factor \(1/l^{2}\) is large, while the left side stays finite. The bracket must then be close to zero, and \(H_{i} - H_{1} \approx -\alpha EA (t_{i} - t_{1})\). The tension follows the temperature and hardly depends on the load. For 243-AL1 a drop of 10 K adds \(\alpha EA \cdot 10\) = 3.07 kN, and the 30 m column of the stringing table below shows 3.05 kN between -30°C and -20°C. The design state for short spans is the lowest temperature:</p>
<p>$$t_{1} = t_{min}, \qquad q_{1} = q_{wire}, \qquad H_{1} = H_{max}$$</p>
<p>where \(q_{wire}\) is the self weight of the bare wire.</p>
<p><strong>In a long span</strong> the right side tends to zero, and \(q_{i}/H_{i} \approx q_{1}/H_{1}\). The tension follows the load, and temperature hardly matters. The design state for long spans is the heaviest ice (or ice with wind):</p>
<p>$$t_{1} = t_{ice}, \qquad q_{1} = q_{ice}, \qquad H_{1} = H_{max}$$</p>
<p>The boundary between the two is the critical span.</p>
<h2>5. Critical Span</h2>
<p>Write the state equation from the cold state (\(t_{min}\), \(q_{wire}\), \(H_{t_{min}}\)) to the ice state (\(t_{ice}\), \(q_{ice}\), \(H_{ice}\)):</p>
<p>$$\frac{q_{ice}^{2} l^{2}}{24 H_{ice}^{2}} - \frac{q_{wire}^{2} l^{2}}{24 H_{t_{min}}^{2}} = \alpha (t_{ice} - t_{min}) + \frac{H_{ice} - H_{t_{min}}}{EA}$$</p>
<p>In the critical span both states reach the permissible tension at the same time: \(H_{ice} = H_{t_{min}} = H_{max}\). The elastic term drops out:</p>
<p>$$\frac{l_{cr}^{2}}{24 H_{max}^{2}} (q_{ice}^{2} - q_{wire}^{2}) = \alpha (t_{ice} - t_{min})$$</p>
<p>and the critical span is</p>
<p>$$l_{cr} = H_{max} \sqrt{\frac{24 \alpha (t_{ice} - t_{min})}{q_{ice}^{2} - q_{wire}^{2}}}$$</p>
<p>The rule for the design state:</p>
<ul>
<li>\(l &lt; l_{cr}\): the lowest temperature governs;</li>
<li>\(l &gt; l_{cr}\): the heaviest load governs;</li>
<li>\(l = l_{cr}\): both give \(H_{max}\), either can be the starting state.</li>
</ul>
<h2>6. Example: Stringing Table for 243-AL1</h2>
<p>Auxiliary wires of a catenary system, such as a feeder or an earth wire, are often freely suspended. They must be strung so that under any weather the tension stays within the permissible value and the sag within the clearances. The installer gets this as a stringing table or chart: tension and sag against the ambient temperature for each span.</p>
<h3>Initial Data</h3>
<p>The wire is the aluminum conductor 243-AL1 (EN 50182):</p>
<table>
<thead>
<tr>
<th>Parameter</th>
<th align="right">Value</th>
</tr>
</thead>
<tbody><tr>
<td>Area \({A}\)</td>
<td align="right">242.5 mm²</td>
</tr>
<tr>
<td>Wires</td>
<td align="right">61 × 2.25 mm</td>
</tr>
<tr>
<td>Diameter</td>
<td align="right">20.3 mm</td>
</tr>
<tr>
<td>Mass</td>
<td align="right">671.1 kg/km</td>
</tr>
<tr>
<td>Self weight \(q_{wire}\)</td>
<td align="right">6.583 N/m</td>
</tr>
<tr>
<td>Rated strength</td>
<td align="right">43.66 kN</td>
</tr>
<tr>
<td>Final modulus \({E}\)</td>
<td align="right">55,000 N/mm²</td>
</tr>
<tr>
<td>\(\alpha\)</td>
<td align="right">23 × 10⁻⁶ 1/K</td>
</tr>
</tbody></table>
<p>The task: tension and sag for spans from 30 to 100 m in steps of 10 m and for temperatures from -30°C to +40°C in steps of 5°C. Supports at the same level, self weight only.</p>
<p>The starting state: \(H_{max}\) = 20 kN at -30°C, which is 46% of the rated strength.</p>
<h3>Which State Governs Here</h3>
<p>Before building the table, check that -30°C really is the design state for spans up to 100 m. As an illustration take 10 mm of radial ice (density 900 kg/m³) at -5°C, without wind. The ice adds 8.40 N/m, so \(q_{ice}\) = 14.99 N/m, and</p>
<p>$$l_{cr} = 20{,}000 \sqrt{\frac{24 \cdot 23 \cdot 10^{-6} \cdot 25}{14.99^{2} - 6.583^{2}}} = 174~\mathrm{m}$$</p>
<p>All spans from 30 to 100 m are shorter, so the cold state governs. A direct check gives the same answer: starting from 20 kN at -30°C, the 100 m span under this ice at -5°C reaches 16.4 kN. Wind on the iced wire increases \(q_{ice}\) and shortens \(l_{cr}\), so for a real project repeat the check with the ice and wind loads of the site.</p>
<h3>Solving 120 Equations with Goal Seek</h3>
<p>Eight spans and fifteen temperatures give 120 state equations. I solved them in MS Excel. A small VBA function, <code>EquationStateSingleWire</code>, returns the difference between the left and the right side of the state equation for one cell. Goal Seek drives this difference to zero by changing the tension in the matching cell of the result table.</p>
<p>Goal Seek works with one cell at a time, and running it 120 times by hand is no fun. This macro runs it for a whole range. Feel free to use it in your calculations:</p>
<pre><code class="language-vba">Sub MultiGoalSeek()
    Dim setCells As Range, changingCells As Range
    Dim toValue As Double
    Dim cell As Range, changeCell As Range

    ' Request the range for "Set Cells"
    On Error Resume Next
    Set setCells = Application.InputBox("Select the range for Set Cells", Type:=8)
    If setCells Is Nothing Then Exit Sub
    On Error GoTo 0

    ' Request the value for "To Value"
    On Error Resume Next
    toValue = Application.InputBox("Enter the value for To Value", Type:=1)
    If Err.Number &lt;&gt; 0 Then Exit Sub
    On Error GoTo 0

    ' Request the range for "By Changing Cells"
    On Error Resume Next
    Set changingCells = Application.InputBox("Select the range for By Changing Cells", Type:=8)
    If changingCells Is Nothing Then Exit Sub
    On Error GoTo 0

    ' Check if the range sizes match
    If setCells.Cells.Count &lt;&gt; changingCells.Cells.Count Then
        MsgBox "The ranges Set Cells and By Changing Cells must be the same size!", vbExclamation
        Exit Sub
    End If

    ' Iterate through cells and apply Goal Seek
    Dim i As Integer
    For i = 1 To setCells.Cells.Count
        Set cell = setCells.Cells(i)
        Set changeCell = changingCells.Cells(i)

        cell.GoalSeek Goal:=toValue, ChangingCell:=changeCell
    Next i

    MsgBox "Goal Seek has been applied to all cells!", vbInformation
End Sub
</code></pre>
<p>Run it, select the 120 difference cells, enter 0, then select the 120 tension cells. As an independent check I solved the same equations by bisection in Python: the largest difference from the Goal Seek results is 0.5 N.</p>
<h3>Results</h3>
<p>Horizontal tension \({H}\), kN:</p>
<table>
<thead>
<tr>
<th align="right">t, °C</th>
<th align="right">30 m</th>
<th align="right">40 m</th>
<th align="right">50 m</th>
<th align="right">60 m</th>
<th align="right">70 m</th>
<th align="right">80 m</th>
<th align="right">90 m</th>
<th align="right">100 m</th>
</tr>
</thead>
<tbody><tr>
<td align="right">-30</td>
<td align="right">20.00</td>
<td align="right">20.00</td>
<td align="right">20.00</td>
<td align="right">20.00</td>
<td align="right">20.00</td>
<td align="right">20.00</td>
<td align="right">20.00</td>
<td align="right">20.00</td>
</tr>
<tr>
<td align="right">-25</td>
<td align="right">18.48</td>
<td align="right">18.48</td>
<td align="right">18.49</td>
<td align="right">18.50</td>
<td align="right">18.52</td>
<td align="right">18.53</td>
<td align="right">18.55</td>
<td align="right">18.56</td>
</tr>
<tr>
<td align="right">-20</td>
<td align="right">16.95</td>
<td align="right">16.97</td>
<td align="right">16.99</td>
<td align="right">17.02</td>
<td align="right">17.04</td>
<td align="right">17.08</td>
<td align="right">17.11</td>
<td align="right">17.15</td>
</tr>
<tr>
<td align="right">-15</td>
<td align="right">15.44</td>
<td align="right">15.46</td>
<td align="right">15.50</td>
<td align="right">15.54</td>
<td align="right">15.59</td>
<td align="right">15.64</td>
<td align="right">15.70</td>
<td align="right">15.77</td>
</tr>
<tr>
<td align="right">-10</td>
<td align="right">13.92</td>
<td align="right">13.97</td>
<td align="right">14.02</td>
<td align="right">14.09</td>
<td align="right">14.16</td>
<td align="right">14.24</td>
<td align="right">14.33</td>
<td align="right">14.42</td>
</tr>
<tr>
<td align="right">-5</td>
<td align="right">12.42</td>
<td align="right">12.48</td>
<td align="right">12.56</td>
<td align="right">12.66</td>
<td align="right">12.76</td>
<td align="right">12.88</td>
<td align="right">13.00</td>
<td align="right">13.13</td>
</tr>
<tr>
<td align="right">0</td>
<td align="right">10.93</td>
<td align="right">11.02</td>
<td align="right">11.13</td>
<td align="right">11.26</td>
<td align="right">11.41</td>
<td align="right">11.56</td>
<td align="right">11.73</td>
<td align="right">11.90</td>
</tr>
<tr>
<td align="right">5</td>
<td align="right">9.45</td>
<td align="right">9.59</td>
<td align="right">9.75</td>
<td align="right">9.93</td>
<td align="right">10.12</td>
<td align="right">10.32</td>
<td align="right">10.53</td>
<td align="right">10.75</td>
</tr>
<tr>
<td align="right">10</td>
<td align="right">8.01</td>
<td align="right">8.21</td>
<td align="right">8.43</td>
<td align="right">8.67</td>
<td align="right">8.92</td>
<td align="right">9.18</td>
<td align="right">9.43</td>
<td align="right">9.69</td>
</tr>
<tr>
<td align="right">15</td>
<td align="right">6.63</td>
<td align="right">6.91</td>
<td align="right">7.21</td>
<td align="right">7.51</td>
<td align="right">7.83</td>
<td align="right">8.14</td>
<td align="right">8.44</td>
<td align="right">8.74</td>
</tr>
<tr>
<td align="right">20</td>
<td align="right">5.36</td>
<td align="right">5.74</td>
<td align="right">6.12</td>
<td align="right">6.50</td>
<td align="right">6.87</td>
<td align="right">7.23</td>
<td align="right">7.58</td>
<td align="right">7.91</td>
</tr>
<tr>
<td align="right">25</td>
<td align="right">4.26</td>
<td align="right">4.74</td>
<td align="right">5.20</td>
<td align="right">5.64</td>
<td align="right">6.05</td>
<td align="right">6.45</td>
<td align="right">6.83</td>
<td align="right">7.19</td>
</tr>
<tr>
<td align="right">30</td>
<td align="right">3.41</td>
<td align="right">3.96</td>
<td align="right">4.46</td>
<td align="right">4.94</td>
<td align="right">5.38</td>
<td align="right">5.80</td>
<td align="right">6.19</td>
<td align="right">6.57</td>
</tr>
<tr>
<td align="right">35</td>
<td align="right">2.79</td>
<td align="right">3.37</td>
<td align="right">3.89</td>
<td align="right">4.38</td>
<td align="right">4.83</td>
<td align="right">5.26</td>
<td align="right">5.66</td>
<td align="right">6.05</td>
</tr>
<tr>
<td align="right">40</td>
<td align="right">2.36</td>
<td align="right">2.93</td>
<td align="right">3.45</td>
<td align="right">3.93</td>
<td align="right">4.38</td>
<td align="right">4.81</td>
<td align="right">5.21</td>
<td align="right">5.60</td>
</tr>
</tbody></table>
<p>Sag \({f}\), m:</p>
<table>
<thead>
<tr>
<th align="right">t, °C</th>
<th align="right">30 m</th>
<th align="right">40 m</th>
<th align="right">50 m</th>
<th align="right">60 m</th>
<th align="right">70 m</th>
<th align="right">80 m</th>
<th align="right">90 m</th>
<th align="right">100 m</th>
</tr>
</thead>
<tbody><tr>
<td align="right">-30</td>
<td align="right">0.04</td>
<td align="right">0.07</td>
<td align="right">0.10</td>
<td align="right">0.15</td>
<td align="right">0.20</td>
<td align="right">0.26</td>
<td align="right">0.33</td>
<td align="right">0.41</td>
</tr>
<tr>
<td align="right">-25</td>
<td align="right">0.04</td>
<td align="right">0.07</td>
<td align="right">0.11</td>
<td align="right">0.16</td>
<td align="right">0.22</td>
<td align="right">0.28</td>
<td align="right">0.36</td>
<td align="right">0.44</td>
</tr>
<tr>
<td align="right">-20</td>
<td align="right">0.04</td>
<td align="right">0.08</td>
<td align="right">0.12</td>
<td align="right">0.17</td>
<td align="right">0.24</td>
<td align="right">0.31</td>
<td align="right">0.39</td>
<td align="right">0.48</td>
</tr>
<tr>
<td align="right">-15</td>
<td align="right">0.05</td>
<td align="right">0.09</td>
<td align="right">0.13</td>
<td align="right">0.19</td>
<td align="right">0.26</td>
<td align="right">0.34</td>
<td align="right">0.42</td>
<td align="right">0.52</td>
</tr>
<tr>
<td align="right">-10</td>
<td align="right">0.05</td>
<td align="right">0.09</td>
<td align="right">0.15</td>
<td align="right">0.21</td>
<td align="right">0.28</td>
<td align="right">0.37</td>
<td align="right">0.47</td>
<td align="right">0.57</td>
</tr>
<tr>
<td align="right">-5</td>
<td align="right">0.06</td>
<td align="right">0.11</td>
<td align="right">0.16</td>
<td align="right">0.23</td>
<td align="right">0.32</td>
<td align="right">0.41</td>
<td align="right">0.51</td>
<td align="right">0.63</td>
</tr>
<tr>
<td align="right">0</td>
<td align="right">0.07</td>
<td align="right">0.12</td>
<td align="right">0.18</td>
<td align="right">0.26</td>
<td align="right">0.35</td>
<td align="right">0.46</td>
<td align="right">0.57</td>
<td align="right">0.69</td>
</tr>
<tr>
<td align="right">5</td>
<td align="right">0.08</td>
<td align="right">0.14</td>
<td align="right">0.21</td>
<td align="right">0.30</td>
<td align="right">0.40</td>
<td align="right">0.51</td>
<td align="right">0.63</td>
<td align="right">0.77</td>
</tr>
<tr>
<td align="right">10</td>
<td align="right">0.09</td>
<td align="right">0.16</td>
<td align="right">0.24</td>
<td align="right">0.34</td>
<td align="right">0.45</td>
<td align="right">0.57</td>
<td align="right">0.71</td>
<td align="right">0.85</td>
</tr>
<tr>
<td align="right">15</td>
<td align="right">0.11</td>
<td align="right">0.19</td>
<td align="right">0.29</td>
<td align="right">0.39</td>
<td align="right">0.52</td>
<td align="right">0.65</td>
<td align="right">0.79</td>
<td align="right">0.94</td>
</tr>
<tr>
<td align="right">20</td>
<td align="right">0.14</td>
<td align="right">0.23</td>
<td align="right">0.34</td>
<td align="right">0.46</td>
<td align="right">0.59</td>
<td align="right">0.73</td>
<td align="right">0.88</td>
<td align="right">1.04</td>
</tr>
<tr>
<td align="right">25</td>
<td align="right">0.17</td>
<td align="right">0.28</td>
<td align="right">0.40</td>
<td align="right">0.53</td>
<td align="right">0.67</td>
<td align="right">0.82</td>
<td align="right">0.98</td>
<td align="right">1.14</td>
</tr>
<tr>
<td align="right">30</td>
<td align="right">0.22</td>
<td align="right">0.33</td>
<td align="right">0.46</td>
<td align="right">0.60</td>
<td align="right">0.75</td>
<td align="right">0.91</td>
<td align="right">1.08</td>
<td align="right">1.25</td>
</tr>
<tr>
<td align="right">35</td>
<td align="right">0.27</td>
<td align="right">0.39</td>
<td align="right">0.53</td>
<td align="right">0.68</td>
<td align="right">0.84</td>
<td align="right">1.00</td>
<td align="right">1.18</td>
<td align="right">1.36</td>
</tr>
<tr>
<td align="right">40</td>
<td align="right">0.31</td>
<td align="right">0.45</td>
<td align="right">0.60</td>
<td align="right">0.75</td>
<td align="right">0.92</td>
<td align="right">1.10</td>
<td align="right">1.28</td>
<td align="right">1.47</td>
</tr>
</tbody></table>
<img src="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/81251f6e-d638-4b30-a7dd-e7741da70de4.png" alt="Stringing chart for 243-AL1, spans 30-100 m" style="display:block;margin:0 auto" />

<p><em>Stringing chart for 243-AL1: horizontal tension against temperature, spans 30-100 m</em></p>
<p>What the table shows:</p>
<ul>
<li>All spans start from the same 20 kN at -30°C, but they lose tension at different rates. At +40°C the 30 m span keeps 2.36 kN and the 100 m span 5.60 kN. This is section 4 in numbers: the shorter the span, the more its tension depends on temperature.</li>
<li>The installer reads the tension for the span and the temperature at the time of stringing. On a sunny day the wire is warmer than the air, so add 5-15°C to the air temperature, depending on the region and the season.</li>
</ul>
<h2>7. Limits of the Model</h2>
<ul>
<li><strong>Shallow sag.</strong> The wire length comes from the parabola. Where it stops being accurate is the topic of <a href="https://www.linkedin.com/pulse/sag-calculation-parabola-vs-hyperbolic-pavel-barysenka-kbrse">Sag Calculation: Parabola vs. Hyperbolic</a>.</li>
<li><strong>One span with fixed supports.</strong> A tension section with several spans of different lengths needs the equivalent span.</li>
<li><strong>A homogeneous wire.</strong> Steel-aluminium and other composite conductors need an equivalent \({E}\) and \(\alpha\).</li>
<li><strong>Not for the contact wire.</strong> The contact wire of a catenary hangs on droppers from the messenger wire, and its model is much more complex.</li>
</ul>
<h2>8. Conclusions</h2>
<ol>
<li>The horizontal component of tension is constant along a freely suspended wire, and at normal sags the total tension differs from it by a fraction of a percent. Design works with \({H}\).</li>
<li>The state equation links the tension in any two states through the change of wire length: geometry on the left, thermal expansion and elastic stretch on the right. With one state known it gives a cubic in the unknown tension.</li>
<li>The starting state is the one with the highest tension. Below the critical span this is the lowest temperature, above it the heaviest load. Check \(l_{cr}\) before you build a stringing table.</li>
<li>In Excel, Goal Seek and a short macro are enough to solve a full stringing table.</li>
</ol>
<p>The workbook is free to download: <a href="https://drive.google.com/file/d/15YNX7ttVm_AYqaDcTPR2E6xXZe7-6_A5/view?usp=sharing">Excel file, sheet "EQ"</a>. It contains the 243-AL1 data, both tables and the macro. Try a different starting tension, or replace the wire data with your own conductor.</p>
<h2>The Series</h2>
<p>Mechanics of a Freely Suspended Wire:</p>
<ol>
<li>State Equation of a Freely Suspended Wire (this article)</li>
<li><a href="https://www.linkedin.com/pulse/equivalent-span-when-one-means-many-pavel-barysenka-acg6f">Equivalent Span: When One Means Many</a></li>
<li><a href="https://www.linkedin.com/pulse/composite-conductors-core-ideas-unseen-challenges-pavel-barysenka-x1i9f">Composite Conductors: Core Ideas and Unseen Challenges</a></li>
<li><a href="https://www.linkedin.com/pulse/stranded-conductors-unseen-stiffness-pavel-barysenka-za2ef">Stranded Conductors: Unseen Stiffness</a></li>
<li><a href="https://www.linkedin.com/pulse/sag-calculation-parabola-vs-hyperbolic-pavel-barysenka-kbrse">Sag Calculation: Parabola vs. Hyperbolic</a></li>
<li><a href="https://pavelbarysenka.hashnode.dev/sag-calculation-segment-equilibrium-method">Sag Calculation: Segment Equilibrium Method</a></li>
<li><a href="https://pavelbarysenka.hashnode.dev/sag-calculation-how-low-can-the-tension-go">Sag Calculation: How Low Can the Tension Go?</a></li>
<li>Iterative nodal (tangent) method: coming next</li>
<li>FEM model of a single wire: planned</li>
</ol>
<p><em>First published on LinkedIn in April 2025. Revised for Hashnode: new figures, the derivation of the state equation, the critical span check and the stringing tables as text.</em></p>
]]></content:encoded></item><item><title><![CDATA[Sag Calculation: How Low Can the Tension Go?]]></title><description><![CDATA[How low can wire tension go? A wire pulled into place needs at least 0.754 of its weight at the support, so W/H = 2.4 is the physical limit.]]></description><link>https://pavelbarysenka.hashnode.dev/sag-calculation-how-low-can-the-tension-go</link><guid isPermaLink="true">https://pavelbarysenka.hashnode.dev/sag-calculation-how-low-can-the-tension-go</guid><category><![CDATA[ohl]]></category><category><![CDATA[OHLE]]></category><category><![CDATA[ocs]]></category><category><![CDATA[ocl]]></category><category><![CDATA[catenary]]></category><category><![CDATA[ole]]></category><category><![CDATA[OHW]]></category><category><![CDATA[wire-mechanics]]></category><category><![CDATA[sag-calculation]]></category><dc:creator><![CDATA[Pavel Barysenka]]></dc:creator><pubDate>Tue, 27 Oct 2026 21:36:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/79609f9d-d6bf-4d1d-9a4e-b6f3c50e1f91.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Intro</h2>
<p>In the previous article, <a href="https://pavelbarysenka.hashnode.dev/sag-calculation-segment-equilibrium-method">Sag Calculation: Segment Equilibrium Method</a>, I deliberately pushed the method to an extreme: a 40 m span of 243-AL1 with only \({H}\) = 100 N of horizontal tension. The sag grew to more than half the span, and the curve missed the right support by 5.5%. I chose 100 N to make the differences between the approximations visible.</p>
<p>Afterwards I asked myself a simple question: could anyone actually hang that wire? The formulas return a sag for any tension, even for 1 N. A real wire is different. To lift it off the ground and fix it at the supports, somebody has to pull it, and the pull has to carry its weight.</p>
<p>The answer is no. The test case was beyond the physical limit, and choosing it was my mistake. In this add-on before the Tangent Method I show where the limit is, how to check a span against it, and what the sag formulas do on the way there.</p>
<h2>1. One Ratio Instead of Newtons</h2>
<p>100 N is an extreme tension for 243-AL1 over 40 m. The same 100 N would be a normal tension for a much lighter wire or a much shorter span. What the shape of the wire responds to is the ratio of its weight to the horizontal tension:</p>
<p>$$\frac{W}{H} = \frac{q L}{H}$$</p>
<p>where</p>
<ul>
<li>\({W}\): weight of the wire over the span length, N;</li>
<li>\({q}\): unit weight of the wire, N/m;</li>
<li>\({L}\): horizontal span length, m;</li>
<li>\({H}\): horizontal component of tension, N.</li>
</ul>
<p>For a level span without point loads the catenary gives closed-form expressions in this one ratio. Sag ratio:</p>
<p>$$\frac{f}{L} = \frac{H}{W}\left[\cosh\left(\frac{W}{2H}\right) - 1\right]$$</p>
<p>Slope of the wire at the supports:</p>
<p>$$\tan\theta = \sinh\left(\frac{W}{2H}\right)$$</p>
<p>Wire length \({S}\) relative to the span:</p>
<p>$$\frac{S}{L} = \frac{2H}{W}\sinh\left(\frac{W}{2H}\right)$$</p>
<p>For a shallow sag the parabola gives the familiar approximations:</p>
<p>$$\frac{f}{L} \approx \frac{W}{8H}, \qquad \tan\theta \approx \frac{W}{2H}$$</p>
<p>where</p>
<ul>
<li>\({f}\): maximum sag, m;</li>
<li>\(\theta\): angle between the wire and the horizontal at the support;</li>
<li>\({S}\): length of the wire in the span, m.</li>
</ul>
<h2>2. Two Ways to Hang a Wire</h2>
<p>There are two ways to get a wire between two supports.</p>
<p><strong>Hang a cut length.</strong> Cut the wire to length, fix both ends to the attachment points on the ground, then raise the points. The wire takes whatever sag its length gives, like a chain hung between two nails. Any sag is possible this way, including a very deep one.</p>
<p><strong>Pull it into place.</strong> Anchor one end and pull the other with a winch or a tensioner until the wire reaches the design sag, then clamp it. Overhead lines and contact systems are installed this way, so this is the case to design for.</p>
<p>While the wire is being pulled, the force at the pulled end is the tension of the wire at that support:</p>
<p>$$T = \sqrt{H^{2} + R^{2}}$$</p>
<p>where \({R}\) is the vertical reaction at the support. For a level span without point loads this becomes:</p>
<p>$$\frac{T}{W} = \frac{H}{W}\cosh\left(\frac{W}{2H}\right)$$</p>
<p>As \({H}\) drops, \({T}\) first falls: there is less horizontal pull. Then it rises again: the wire gets longer and steeper, and the support has to carry more of its weight. The minimum is where</p>
<p>$$\frac{W}{2H}\tanh\left(\frac{W}{2H}\right) = 1$$</p>
<p>which gives</p>
<p>$$\frac{W}{H} = 2.40, \qquad T_{min} = 0.754 W$$</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/f5a6adf5-c978-4060-933e-900d70af3cfa.png" alt="Tension at the supports vs. W/H for a level span" style="display:block;margin:0 auto" />

<p><em>Tension at the supports of a level span: one minimum at W/H = 2.40, a stable branch to the left and an unstable one to the right</em></p>
<p>This minimum is the physical limit:</p>
<ul>
<li>With less than \({0.754 W}\) at the end there is no equilibrium at all: the wire cannot be held up between the supports.</li>
<li>With more, there are two shapes with the same end tension. The shallow one is stable. The deep one is an energy maximum of the wire and the pulling force together: a wire pulled into it either slides back to the shallow shape or runs away.</li>
<li>So a wire pulled into place always ends up with \(W/H\) below 2.4. After clamping its length is fixed, and the shape it was clamped in stays stable.</li>
</ul>
<p>For 243-AL1 over 40 m (\({W}\) = 263.3 N) the limit is \({H}\) = 110 N, with 199 N at the support, a slope of 56.5° and a sag of 34% of the span.</p>
<h2>3. Three Regimes</h2>
<p>The exact values show how fast the picture changes once \(W/H\) grows past 1. The \({H}\) column is for 243-AL1 (\({q}\) = 6.5835 N/m) over \({L}\) = 40 m.</p>
<table>
<thead>
<tr>
<th align="right">\(W/H\)</th>
<th align="right">\({H}\), N</th>
<th align="right">\(f/L\), parabola</th>
<th align="right">\(f/L\), catenary</th>
<th align="right">Difference</th>
<th align="right">\(\theta\) at support</th>
<th align="right">\(S/L\)</th>
</tr>
</thead>
<tbody><tr>
<td align="right">0.1</td>
<td align="right">2633</td>
<td align="right">1.25%</td>
<td align="right">1.25%</td>
<td align="right">0.02%</td>
<td align="right">2.9°</td>
<td align="right">1.0004</td>
</tr>
<tr>
<td align="right">0.4</td>
<td align="right">658</td>
<td align="right">5.00%</td>
<td align="right">5.02%</td>
<td align="right">0.33%</td>
<td align="right">11.4°</td>
<td align="right">1.0067</td>
</tr>
<tr>
<td align="right">1</td>
<td align="right">263</td>
<td align="right">12.50%</td>
<td align="right">12.76%</td>
<td align="right">2.1%</td>
<td align="right">27.5°</td>
<td align="right">1.042</td>
</tr>
<tr>
<td align="right">2</td>
<td align="right">132</td>
<td align="right">25.00%</td>
<td align="right">27.15%</td>
<td align="right">8.6%</td>
<td align="right">49.6°</td>
<td align="right">1.175</td>
</tr>
<tr>
<td align="right"><strong>2.4</strong></td>
<td align="right"><strong>110</strong></td>
<td align="right"><strong>30.00%</strong></td>
<td align="right"><strong>33.78%</strong></td>
<td align="right"><strong>12.6%</strong></td>
<td align="right"><strong>56.5°</strong></td>
<td align="right"><strong>1.258</strong></td>
</tr>
<tr>
<td align="right">3</td>
<td align="right">88</td>
<td align="right">37.50%</td>
<td align="right">45.08%</td>
<td align="right">20.2%</td>
<td align="right">64.8°</td>
<td align="right">1.420</td>
</tr>
<tr>
<td align="right">4</td>
<td align="right">66</td>
<td align="right">50.00%</td>
<td align="right">69.05%</td>
<td align="right">38.1%</td>
<td align="right">74.6°</td>
<td align="right">1.813</td>
</tr>
</tbody></table>
<p><em>Level span, no point loads. Difference: catenary sag relative to parabola sag. Bold: the stringing limit.</em></p>
<p>From these numbers, three regimes. Errors of the segment method are for \({N}\) = 40 segments, as in the workbook:</p>
<table>
<thead>
<tr>
<th>Regime</th>
<th>\(W/H\)</th>
<th>\(f/L\)</th>
<th>What works</th>
</tr>
</thead>
<tbody><tr>
<td>Shallow sag</td>
<td>up to 0.4</td>
<td>up to 5%</td>
<td>All methods. The parabola stays within 0.33% of the catenary, and the segment method closes on the right support within 0.1% even on an inclined span with point loads.</td>
</tr>
<tr>
<td>Deep sag</td>
<td>0.4 to 2.4</td>
<td>5% to 34%</td>
<td>Catenary and the segment method from the 2nd approximation on. The parabola and the 0th approximation underestimate the sag by up to 11%. On inclined spans with point loads the right-support error grows to 4.6%.</td>
</tr>
<tr>
<td>Beyond the stringing limit</td>
<td>above 2.4</td>
<td>above 34%</td>
<td>No wire pulled into place hangs like this. The formulas still return a shape, but it belongs to no installed wire.</td>
</tr>
</tbody></table>
<img src="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/d74d2fb5-a85e-465c-8a48-99fe0c10614e.png" alt="Sag ratio f/L vs. W/H for parabola and catenary" style="display:block;margin:0 auto" />

<p><em>Sag ratio vs. W/H on a level span: parabola and catenary, the three regimes, the working range of 243-AL1 over 40 m and the H = 100 N test case</em></p>
<p>Working tensions of an overhead contact system or a power line sit far to the left. For 243-AL1 over 40 m, \({H}\) = 10-20 kN gives \(W/H\) = 0.013-0.026. The test span from the previous article closes on the right support within 0.027% at 10 kN (about 4 mm) and 0.014% at 20 kN.</p>
<h2>4. Where the H = 100 N Test Case Sits</h2>
<p>For the bare wire of the test span \({W}\) = 263.34 N, and with \({H}\) = 100 N:</p>
<p>$$\frac{W}{H} = \frac{263.34}{100} = 2.63$$</p>
<p>That is already above 2.4. The real test span is worse: it is inclined (\(y_{B} - y_{A}\) = 5 m) and carries 90 N of point loads. For such a span there is no closed formula, so I searched for the minimum of the end tension numerically, with an exact equilibrium solver (Section 5). The limit is \({H}\) = 135 N when the wire is pulled from the lower support and 129 N when it is pulled from the upper one.</p>
<p>So the 100 N case is below the limit whichever end is pulled. The shape in the previous article, with a sag of 20.99 / 40 = 52% of the span, is a wire that could not be strung. The comparison of the approximations in that article still holds as a numerical exercise, but as a design case it was a mistake. Please check the tension before you trust a sag.</p>
<h2>5. What the Segment Method Does Near the Limit</h2>
<p>To see where the method itself gives way, I reproduced it in Python: the same algorithm and the same input as the workbook from the previous article. At \({H}\) = 100 N and \({N}\) = 40 it returns the published table to the last digit. Then I varied the tension, the number of segments \({N}\) and the number of passes. For the limits in Section 4 I used an exact version of the same march: weight on the true segment length, point loads at the nodes and the left reaction found by closing the curve on the right support. On a level span it matches the catenary to the last digit. Two effects show up.</p>
<h3>Three Passes Are Enough up to the Limit</h3>
<p>On a level span without point loads the segment method should converge to the catenary. Error of the maximum sag against the exact catenary, \({N}\) = 40:</p>
<table>
<thead>
<tr>
<th align="right">\(W/H\)</th>
<th align="right">0th approx. (parabola)</th>
<th align="right">1st approx.</th>
<th align="right">2nd approx.</th>
<th align="right">3rd approx.</th>
</tr>
</thead>
<tbody><tr>
<td align="right">1</td>
<td align="right">−2.06%</td>
<td align="right">−0.06%</td>
<td align="right">0.00%</td>
<td align="right">0.00%</td>
</tr>
<tr>
<td align="right">2</td>
<td align="right">−7.93%</td>
<td align="right">−0.87%</td>
<td align="right">−0.07%</td>
<td align="right">+0.01%</td>
</tr>
<tr>
<td align="right">2.4</td>
<td align="right">−11.18%</td>
<td align="right">−1.66%</td>
<td align="right">−0.19%</td>
<td align="right">0.00%</td>
</tr>
<tr>
<td align="right">3</td>
<td align="right">−16.82%</td>
<td align="right">−3.53%</td>
<td align="right">−0.60%</td>
<td align="right">−0.06%</td>
</tr>
<tr>
<td align="right">4</td>
<td align="right">−27.59%</td>
<td align="right">−8.67%</td>
<td align="right">−2.26%</td>
<td align="right">−0.44%</td>
</tr>
</tbody></table>
<p>Up to the stringing limit the three passes of the workbook stay within 0.2% of the catenary. Beyond it they fall behind, because the steep segments near the supports keep getting longer, and heavier, from pass to pass.</p>
<p>The horizontal grid is not the problem here. The length of a segment grows with its slope,</p>
<p>$$\Delta L_{i} = \frac{\Delta x_{i}}{\cos\theta_{i}}$$</p>
<p>so at 65° a segment near the support is 2.4 times longer than its step. Yet going from \({N}\) = 40 to \({N}\) = 320 at \({H}\) = 100 N changes the maximum sag by 1% only (20.99 m vs. 21.21 m).</p>
<h3>The Right-Support Error Is Not a Grid Error</h3>
<p>On the inclined test span with point loads the picture is different. Error of the last node \(y_{N}\) against \(y_{B}\), 2nd approximation:</p>
<table>
<thead>
<tr>
<th align="right">\({H}\), N</th>
<th align="right">\(W/H\)</th>
<th align="right">\({N}\) = 40</th>
<th align="right">\({N}\) = 320</th>
</tr>
</thead>
<tbody><tr>
<td align="right">10000</td>
<td align="right">0.026</td>
<td align="right">+0.027%</td>
<td align="right">+0.001%</td>
</tr>
<tr>
<td align="right">658</td>
<td align="right">0.40</td>
<td align="right">−0.10%</td>
<td align="right">−0.49%</td>
</tr>
<tr>
<td align="right">300</td>
<td align="right">0.88</td>
<td align="right">−1.29%</td>
<td align="right">−2.10%</td>
</tr>
<tr>
<td align="right">200</td>
<td align="right">1.32</td>
<td align="right">−2.76%</td>
<td align="right">−3.87%</td>
</tr>
<tr>
<td align="right">135</td>
<td align="right">1.95</td>
<td align="right">−4.55%</td>
<td align="right">−5.93%</td>
</tr>
<tr>
<td align="right">100</td>
<td align="right">2.63</td>
<td align="right">−5.53%</td>
<td align="right">−7.05%</td>
</tr>
</tbody></table>
<p>At working tension a finer grid removes the error. In deep sag it makes the error larger, and extra passes do not help either: at \({H}\) = 100 N it settles at −6.07%. Both offsets from Section 5 of the previous article are at work. The midpoint load arm adds \(\Delta x \sum_{k} F_{k} / 2H\), which shrinks with \({N}\). The \(W_{wire} \cdot L/2\) lever in \(R_{a}\) does not depend on the grid at all. At \({N}\) = 40 the two partly cancel, and a finer grid leaves the second one alone.</p>
<p>So in deep sag, refining this formulation of the method does not converge to the right answer. The support reactions have to come out of the equilibrium of the whole wire, not out of a fixed lever arm, as in the exact version above.</p>
<h2>6. The Minimum Tension for Your Span</h2>
<p>For a level span without point loads the limit is exact:</p>
<p>$$H_{min} = \frac{W}{2.4} = 0.42 W$$</p>
<p>With point loads and inclined supports a quick estimate is</p>
<p>$$H_{min} \approx \frac{q L + \sum_{k} F_{k}}{2.4}$$</p>
<p>where</p>
<ul>
<li>\(F_{k}\): concentrated vertical load \({k}\) in the span, N.</li>
</ul>
<p>I compared it with the exact limit on level and inclined spans (height difference up to 20 m over 40 m) with point loads up to the full wire weight, at mid-span and near a support. In every case the estimate was 1% to 25% above the exact value, so it errs on the safe side. For the test span it gives 147 N against the exact 135 N.</p>
<p>Working tensions are far above this limit: for the test span, 10 kN is about 70 times \(H_{min}\).</p>
<h2>7. Conclusions</h2>
<ol>
<li><strong>Check the tension before the sag.</strong> If \({H}\) is below \(H_{min}\), the wire cannot be pulled into place, and any sag you compute for it is arithmetic.</li>
<li><strong>Think in \(W/H\), not in newtons.</strong> The same tension can be comfortable for one wire and impossible for another. With point loads, add them to \({W}\).</li>
<li><strong>Shallow sag (\(W/H\) up to 0.4):</strong> parabola, catenary and all segment approximations agree. Pick the simplest.</li>
<li><strong>Deep sag (0.4 to 2.4):</strong> the parabola and the 0th approximation underestimate the sag. Use the catenary or the 2nd approximation, and on inclined spans with point loads check the right-support closure.</li>
<li><strong>Learn from my mistake.</strong> The 100 N case of the previous article sits beyond the limit. Pick test cases inside it.</li>
</ol>
<p>To check your own span, use the workbook from the previous article: <a href="https://drive.google.com/file/d/1VfJKbFGuSekAAyWV5TXwbNKNEFo7N0yh/view?usp=sharing">Excel file, sheet "SEM"</a>. Compare your \({H}\) with \(H_{min}\) first, then enter \({q}\), \({L}\) and the loads.</p>
<h3>What's Next</h3>
<p>The next article of the series covers the Iterative Nodal or Tangent Method: equilibrium enforced at every node, with numerical iteration finding the geometry when \({H}\) is not known in advance.</p>
]]></content:encoded></item><item><title><![CDATA[Sag Calculation: Segment Equilibrium Method]]></title><description><![CDATA[How to calculate wire sag with point loads and inclined supports: the segment equilibrium method, step by step, with a free Excel workbook.]]></description><link>https://pavelbarysenka.hashnode.dev/sag-calculation-segment-equilibrium-method</link><guid isPermaLink="true">https://pavelbarysenka.hashnode.dev/sag-calculation-segment-equilibrium-method</guid><category><![CDATA[engineering]]></category><category><![CDATA[excel]]></category><category><![CDATA[Physics]]></category><category><![CDATA[Mathematics]]></category><category><![CDATA[civil engineering]]></category><category><![CDATA[catenary]]></category><category><![CDATA[ocs]]></category><category><![CDATA[ole]]></category><category><![CDATA[OHW]]></category><category><![CDATA[OHLE]]></category><dc:creator><![CDATA[Pavel Barysenka]]></dc:creator><pubDate>Sat, 24 Oct 2026 20:30:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/e72db653-5ff2-4054-a433-b7e533e58ab9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Intro</h2>
<p>In the previous article of this series, <a href="https://www.linkedin.com/pulse/sag-calculation-parabola-vs-hyperbolic-pavel-barysenka-kbrse">Sag Calculation: Parabola vs. Hyperbolic</a>, I compared two classical analytical models and showed where the shallow sag assumption (\(dx \approx dL\)) breaks down. Both curves are closed-form and convenient. Both also assume a smooth wire under a continuous load.</p>
<p>A real span of an overhead contact system (OCS) or a power line rarely looks like that. In practice we deal with:</p>
<ul>
<li>concentrated loads along the span: droppers, clamps, insulators, bird diverters, ice sleeves;</li>
<li>inclined spans with supports at different heights (\(y_A \neq y_B\));</li>
<li>uneven weight distribution when the sag is deep and the wire slope changes sharply between the support and mid-span.</li>
</ul>
<p>Stitching a separate cosh curve between every pair of droppers quickly becomes unmanageable by hand. A simpler engineering route is to split the wire into a finite number of straight segments and check static equilibrium one segment at a time.</p>
<p>This article covers the piecewise-linear sag approximation, also known as the Segment Equilibrium or Local Displacement Method. I run it in standard Excel 365 in three successive approximations, including elastic elongation, with dynamic array formulas (SEQUENCE, MAP, LAMBDA) and no VBA.</p>
<h2>1. The Physical Model: From a Continuous Curve to Hinged Segments</h2>
<p>Divide a span of horizontal length \({L}\) into \({N}\) straight rigid elements connected by frictionless hinges (nodes \(i = 0, 1, 2, \dots, N\)).</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/36897a2d-3502-4f19-b9c0-da587a6fb278.png" alt="01-discrete-span" style="display:block;margin:0 auto" />

<p><em>Discretized wire model: N rigid straight segments connected by frictionless hinges under self-weight and concentrated loads</em></p>
<p>The model rests on four assumptions:</p>
<ul>
<li><strong>Equal horizontal steps.</strong> Every segment has the same horizontal projection \(\Delta x_i = L/N\).</li>
<li><strong>Zero bending stiffness.</strong> The nodes are ideal hinges with zero bending moment. For a flexible stranded conductor this is close to reality.</li>
<li><strong>Constant horizontal tension.</strong> As shown in the first article of the series, <a href="https://pavelbarysenka.hashnode.dev/state-equation-of-a-freely-suspended-wire">State Equation of a Freely Suspended Wire</a>, without horizontal external loads the horizontal component \({H}\) is the same in every segment.</li>
<li><strong>Combined vertical load.</strong> Each segment \({i}\) carries its own weight (projected, \(q \cdot \Delta x_i\), or along the true length, \(q \cdot \Delta L_i\)) plus any concentrated vertical force \(F_i\) at that location.</li>
</ul>
<h2>2. Step-by-Step Equilibrium: No Matrices, No Iterations</h2>
<p>With \({H}\) known, there is no stiffness matrix to invert and no solver to run. We march from the left support \(A(0, y_A)\) to the right support \(B(L, y_B)\).</p>
<h3>Step 1: Support Reactions Ra and Rb</h3>
<p>Taking moments of all vertical loads about support \({B}\), and then about support \({A}\), with the height difference of the supports included, gives the vertical reactions:</p>
<p>$$R_a = \frac{1}{L}\left[\sum_k F_k (L-x_k) + W_{wire}\frac{L}{2} - H(y_B-y_A)\right]$$</p>
<p>$$R_b = \frac{1}{L}\left[\sum_k F_k x_k + W_{wire}\frac{L}{2} + H(y_B-y_A)\right]$$</p>
<p>Check:</p>
<p>$$R_a + R_b = \sum_k F_k + W_{wire}$$</p>
<p>where</p>
<ul>
<li>\({L}\): horizontal span length, m;</li>
<li>\(y_A\), \(y_B\): heights of the left and right supports, m;</li>
<li>\({H}\): horizontal component of tension, N;</li>
<li>\(F_k\): concentrated vertical load \({k}\) at horizontal distance \(x_k\), N;</li>
<li>\(W_{wire}\): total self-weight of the wire in the span, N.</li>
</ul>
<p>Remember the \(W_{wire} \cdot L/2\) term. It assumes the wire's center of gravity is at mid-span, and Section 5 shows what that costs.</p>
<h3>Step 2: Equilibrium of the i-th Segment</h3>
<p>Now isolate the \({i}\)-th segment between nodes \(\mathit{(i-1)}\) and \({i}\).</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/f99cada2-3c47-4cdc-8d80-fc08ad87ee0c.png" alt="02-segment-equilibrium" style="display:block;margin:0 auto" />

<p><em>Free-body diagram of the i-th wire segment and moment balance about node i</em></p>
<p>At the left hinge (\(\mathit{i-1}\)), the rest of the wire pulls the segment with the horizontal force \({H}\) and the upward vertical force \(R_{\mathit{(i-1)}}\). The segment itself carries the total downward load \(Q_i\): its own weight plus any point load \(F_i\).</p>
<p>From node (\(\mathit{i-1}\)) to node \({i}\) the vertical internal force drops by \(Q_i\). To get the vertical drop \(\Delta y_i\), write the moment balance about the right hinge \({i}\), with \(Q_i\) applied at the segment midpoint (arm \(\Delta x_i / 2\)).</p>
<p>Vertical force balance:</p>
<p>$$R_i = R_{\mathit{(i-1)}} - Q_i$$</p>
<p>Moment balance about node \({i}\):</p>
<p>$$\sum M_i = 0: \quad H \Delta y_i - R_{\mathit{(i-1)}} \Delta x_i + Q_i \frac{\Delta x_i}{2} = 0$$</p>
<p>Vertical drop and node elevation:</p>
<p>$$\Delta y_i = \frac{\Delta x_i}{H}\left(R_{\mathit{(i-1)}} - \frac{Q_i}{2}\right), \qquad y_i = y_{\mathit{(i-1)}} - \Delta y_i$$</p>
<p>True length of the segment:</p>
<p>$$\Delta L_i = \sqrt{\Delta x_i^2 + \Delta y_i^2}$$</p>
<p>where</p>
<ul>
<li>\({i}\): segment and right-node index, from 1 to \({N}\); \(y_0 = y_A\), \(R_0 = R_a\);</li>
<li>\(\Delta x_i\): horizontal step \(L/N\), m;</li>
<li>\(\Delta y_i\): vertical drop across segment \({i}\), m;</li>
<li>\(Q_i\): total vertical load on segment \({i}\) (self-weight plus \(F_i\)), N;</li>
<li>\(R_i\): vertical component of wire tension at node \({i}\), N;</li>
<li>\(\Delta L_i\): inclined length of segment \({i}\), m.</li>
</ul>
<p>The algorithm is recursive. Starting from the left boundary (\(y_0 = y_A\), \(R_0 = R_a\)), each \(y_i\) comes directly from the previous node, so there is no simultaneous system to solve.</p>
<h2>3. Three Successive Approximations and Elastic Elongation</h2>
<p>In the previous article, the difference between the parabola and the hyperbolic cosine came down to one question: is the wire weight distributed along the horizontal projection (\({dx}\)) or along the true arc length (\({dL}\))?</p>
<p>The segment method covers both cases with successive approximations:</p>
<ul>
<li><strong>0th approximation, projected weight.</strong> The segment slopes are unknown at the start, so each segment weighs \(q \cdot \Delta x_i\): \(Q_i^{(0)} = q \cdot \Delta x_i + F_i\). One pass gives the drops \(\Delta y_i^{(0)}\) and lengths \(\Delta L_i^{(0)}\).</li>
<li><strong>1st approximation, true length weight.</strong> With the inclined lengths known, the segment weight becomes \(Q_i^{(1)} = q \cdot \Delta L_i^{(0)} + F_i\). Steep segments near the supports are longer than \(\Delta x_i\), so they are heavier. The same formulas give new \(y_i^{(1)}\) and \(\Delta L_i^{(1)}\).</li>
<li><strong>2nd approximation, refined weight.</strong> One more pass with \(Q_i^{(2)} = q \cdot \Delta L_i^{(1)} + F_i\) fixes the final geometry \(y_i^{(2)}\) and the strained wire length \(L = \sum \Delta L_i^{(2)}\).</li>
</ul>
<p>A quick check for readers: set all point loads to zero (\(F_k = 0\)) in the workbook. The 0th approximation then reproduces the analytical parabola, and the 1st and 2nd approximations converge toward the cosh curve.</p>
<h3>Elastic Elongation and Unstressed Length L₀</h3>
<p>Once the geometry is final, both tension components are known in every segment: the constant \({H}\) and the local vertical \(R_i\). The axial tension \(T_i\) and the unstressed (manufactured) length \(\Delta L_{0,i}\) of each segment follow from Hooke's law:</p>
<p>$$T_{i} = \sqrt{H^{2} + R_{i}^{2}}, \qquad \varepsilon_{i} = \frac{T_{i}}{E A}$$</p>
<p>$$\Delta L_{0,i} = \frac{\Delta L_{i}}{1 + \varepsilon_{i}}, \qquad L_{0} = \sum_{i=1}^{N} \Delta L_{0,i}$$</p>
<p>where</p>
<ul>
<li>\(T_i\): axial tension in segment \({i}\), N;</li>
<li>\(\varepsilon_i\): elastic strain of segment \({i}\);</li>
<li>\({E}\): equivalent Young's modulus of the conductor, N/mm²;</li>
<li>\({A}\): cross-sectional area of the conductor, mm²;</li>
<li>\(\Delta L_{0,i}\): unstressed length of segment \({i}\), m;</li>
<li>\(L_0\): total unstressed length of the wire in the span, m.</li>
</ul>
<h2>4. Stress-Testing the Model in Excel</h2>
<p>To make the difference between the approximations visible, I pushed the model into a deep-sag, strongly asymmetric case on the "SEM" sheet of my workbook.</p>
<h3>Input Data (Sheet "SEM")</h3>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>Value</th>
</tr>
</thead>
<tbody><tr>
<td>Conductor</td>
<td>243-AL1 (EN 50182)</td>
</tr>
<tr>
<td>Cross-section \({A}\)</td>
<td>242.5 mm²</td>
</tr>
<tr>
<td>Young's modulus \({E}\)</td>
<td>55,000 N/mm²</td>
</tr>
<tr>
<td>Unit weight \({q}\)</td>
<td>6.5835 N/m</td>
</tr>
<tr>
<td>Span \({L}\)</td>
<td>40 m, \({N}\) = 40 segments, \(\Delta x_i\) = 1.0 m</td>
</tr>
<tr>
<td>Support heights</td>
<td>\(y_A\) = 10.0 m (left), \(y_B\) = 15.0 m (right)</td>
</tr>
<tr>
<td>Horizontal tension \({H}\)</td>
<td>100 N (deliberately low to get a deep sag)</td>
</tr>
</tbody></table>
<p>Point loads (table addForce):</p>
<table>
<thead>
<tr>
<th>Load</th>
<th align="right">\(F_k\), N</th>
<th align="right">\(x_k\), m</th>
</tr>
</thead>
<tbody><tr>
<td>\(F_1\)</td>
<td align="right">50</td>
<td align="right">10</td>
</tr>
<tr>
<td>\(F_2\)</td>
<td align="right">10</td>
<td align="right">20</td>
</tr>
<tr>
<td>\(F_3\)</td>
<td align="right">0</td>
<td align="right">30</td>
</tr>
<tr>
<td>\(F_4\)</td>
<td align="right">30</td>
<td align="right">35</td>
</tr>
</tbody></table>
<h3>Excel Implementation Without Macros</h3>
<p>The algorithm is purely sequential, so it needs neither VBA loops nor Solver. In Excel 365 the whole 40-segment calculation spills from dynamic array formulas built on SEQUENCE, FILTER, MAP and LAMBDA. Three examples.</p>
<p>Node coordinates \(x_i\):</p>
<pre><code class="language-excel">=SEQUENCE(N, 1, L/N, L/N)
</code></pre>
<p>Point loads \(F_i\) mapped to the nodes:</p>
<pre><code class="language-excel">=MAP(S5#, LAMBDA(x, SUM(FILTER(addForce[F, N], addForce[x, m]=x, 0))))
</code></pre>
<p>Cumulative vertical force \(R_i\):</p>
<pre><code class="language-excel">=Ra - MAP(SEQUENCE(ROWS(U5#)), LAMBDA(i, SUM(INDEX(U5#, 1):INDEX(U5#, i))))
</code></pre>
<h3>Results of the Three Approximations</h3>
<img src="https://cdn.hashnode.com/uploads/covers/6ad6959b6cdc3c187829e973/a5903707-aa7f-4aea-904a-9d7fe09776b1.png" alt="03-sag-approximations" style="display:block;margin:0 auto" />

<p><em>Comparison of the 0th, 1st and 2nd approximations for a 40 m inclined span with four point loads and H = 100 N</em></p>
<table>
<thead>
<tr>
<th>Parameter</th>
<th align="right">0th approx. \(q \cdot \Delta x_i\)</th>
<th align="right">1st approx. \(q \cdot \Delta L_i^{(0)}\)</th>
<th align="right">2nd approx. \(q \cdot \Delta L_i^{(1)}\)</th>
</tr>
</thead>
<tbody><tr>
<td>Total wire weight \(W_{wire}\), N</td>
<td align="right">263.34</td>
<td align="right">368.37</td>
<td align="right">396.93</td>
</tr>
<tr>
<td>Left reaction \(R_a\), N</td>
<td align="right">165.42</td>
<td align="right">217.93</td>
<td align="right">232.21</td>
</tr>
<tr>
<td>Right reaction \(R_b\), N</td>
<td align="right">187.92</td>
<td align="right">240.43</td>
<td align="right">254.71</td>
</tr>
<tr>
<td>Strained wire length \({L}\), m</td>
<td align="right">55.9532</td>
<td align="right">60.2914</td>
<td align="right">61.1744</td>
</tr>
<tr>
<td>Unstressed wire length \(L_0\), m</td>
<td align="right"></td>
<td align="right"></td>
<td align="right">61.1736</td>
</tr>
<tr>
<td>Maximum sag \(f_{max}\), m</td>
<td align="right">17.17</td>
<td align="right">20.74</td>
<td align="right">20.99</td>
</tr>
<tr>
<td>Computed right end \(y_{40}\), m</td>
<td align="right">15.45</td>
<td align="right">13.76</td>
<td align="right">14.17</td>
</tr>
<tr>
<td>Right support error vs. \(y_B\)</td>
<td align="right">+3.00%</td>
<td align="right">−8.26%</td>
<td align="right">−5.53%</td>
</tr>
</tbody></table>
<p>The gap between the 0th approximation (\(f_{max}\) = 17.17 m, \({L}\) = 55.95 m) and the 1st and 2nd (\(f_{max}\) = 20.99 m, \({L}\) = 61.17 m) is large. At \({H}\) = 100 N, distributing the weight over the horizontal projection (\(q \cdot \Delta x_i\)) underestimates the wire weight in the span by more than 33% (263.3 N vs. 396.9 N).</p>
<p>The method settles fast: between the 1st and 2nd approximations the maximum sag changes by only 0.25 m (20.74 m vs. 20.99 m).</p>
<h2>5. Why the Curve Misses the Right Support</h2>
<p>The last two rows of the table (rows 44 and 45 on the "SEM" sheet) show a problem. The march starts at \(y_0 = y_A\) = 10.00 m, crosses \({N}\) = 40 segments and reaches \({x}\) = 40 m. The last node \(y_{40}\) should land on the right support, \(y_B\) = 15.00 m. It does not:</p>
<ul>
<li>0th approximation: \(y_{40}\) = 15.45 m (+0.45 m, +3.0%);</li>
<li>1st approximation: \(y_{40}\) = 13.76 m (−1.24 m, −8.3%);</li>
<li>2nd approximation: \(y_{40}\) = 14.17 m (−0.83 m, −5.5%).</li>
</ul>
<p>This is not an error in the workbook. Two simplifications in the textbook form of the method produce exactly these offsets.</p>
<h3>The +0.45 m Offset in the 0th Approximation: Midpoint vs. Node</h3>
<p>In the reaction \(R_a\), the point loads \(F_k\) act at the nodes \({x}\) = 10, 20 and 35 m) with their exact arms \(L-x_k\). In the segment equation for \(\Delta y_i\), the same \(F_i\) is part of \(Q_i = q \cdot \Delta x_i + F_i\) and is halved. This moves it from the hinge \(x_i\) to the segment midpoint \(x_i-\Delta x_i/2\). Over the span the half-step shift adds up to:</p>
<p>$$\Delta y_{offset} = \frac{\Delta x \cdot \sum_{k} F_{k}}{2H}$$</p>
<p>With \(\Delta x\) = 1.0 m, \({H}\) = 100 N and loads of 50, 10 and 30 N:</p>
<p>$$\Delta y_{offset} = \frac{1.0}{2 \cdot 100}(50 + 10 + 30) = 0.45~\mathrm{m}$$</p>
<h3>The −0.83 m Offset in the 1st and 2nd Approximations: Center of Gravity</h3>
<p>The 1st and 2nd approximations still use \(W_{wire} \cdot L/2\) in the reactions, so the wire's center of gravity stays at mid-span (\(L/2\) = 20 m). For a uniform load \(q \cdot \Delta x_i\) this is exact. With true segment lengths \(q \cdot \Delta L_i\) in an inclined, unevenly loaded span, the segments on the steeper side are longer and therefore heavier, and the center of gravity moves away from \(L/2\). Keeping \(L/2\) in \(R_a\) underestimates the starting reaction, and the curve ends below \(y_B\) = 15.00 m.</p>
<h2>6. Conclusions</h2>
<ol>
<li><strong>At working tensions the boundary error is negligible.</strong> \({H}\) = 100 N is an extreme case: the sag exceeds half the span, which magnifies every nonlinear effect. With a realistic \({H}\) = 10,000 N (10 kN) on the "SEM" sheet, the right support error drops below 0.03% (about 4 mm), and the three approximations practically coincide.</li>
<li><strong>Where the method fits:</strong><ul>
<li>spans with point loads (droppers, insulators, weights), inclined supports and a known horizontal tension \({H}\);</li>
<li>a fast, transparent spreadsheet model with no iterations, VBA or FEM software;</li>
<li>an independent check of complex spans.</li>
</ul>
</li>
</ol>
<p>The workbook is free to download: <a href="https://drive.google.com/file/d/1VfJKbFGuSekAAyWV5TXwbNKNEFo7N0yh/view?usp=sharing">Excel file, sheet "SEM"</a>. Two experiments worth trying on the "SEM" sheet:</p>
<ul>
<li>raise \({H}\) from 100 N to 5,000 N and watch the three approximations and the right support error converge;</li>
<li>set all point loads in the addForce table (D3:D6) to 0 and compare the 0th and 2nd approximations with the parabola and cosh calculator from the previous article.</li>
</ul>
<h2>Limits and the Next Step</h2>
<p>The method handles uneven loading well, but it has two limits. It needs the horizontal tension \({H}\) in advance, and its simplified reaction formula drifts at the right support when the sag is deep and asymmetric.</p>
<p>In real design \({H}\) is often the unknown, while the unstressed wire length \(L_0\) is fixed. The next article in the series moves to the iterative nodal (tangent) method, which solves for exact equilibrium at every node for a given unstressed length.</p>
]]></content:encoded></item></channel></rss>