OpenSees Cloud

OpenSees AMI

Cable Analysis

Original Post - 22 Nov 2021 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


Analyzing cables subject to transverse loads is straightforward in OpenSees. Use a mesh of corotational truss elements with elastic uniaxial material. Of course, you can use any uniaxial material you like.

The only trick is you have to scramble the nodes up a little bit–if you try to analyze a perfectly straight cable, you’ll get a singular stiffness matrix.

Consider a horizontal cable subjected to its self-weight. The cable is L=20 ft long (horizontal projection) with 1 inch diameter and elastic modulus 29,000 ksi. The self-weight of the cable is w=2.705 lb/ft.

Cable subjected to self-weight

The horizontal reaction at the end of the cable should be equal to wL2/(8u) where u is the maximum deflection of the cable.

For the model, the cable nodes are defined in a loop with a slight downward sag based on the sine function.

import openseespy.opensees as ops
import numpy as np

E = 29000*kip/inch**2
d = 1*inch
A = 3.14159/4*d**2
w = 0.287*lb/inch**3*A

L = 20*ft
N = 20
dX = L/N
Y = 0

ops.wipe()
ops.model('basic','-ndm',2,'-ndf',2)

ops.uniaxialMaterial('Elastic',1,E)

ops.node(0,0,Y); ops.fix(0,1,1)
for i in range(N):
    x = dX*(i+1)
    ops.node(i+1,x,Y-0.01*np.sin(np.pi*x/L))
    ops.element('corotTruss',i+1,i,i+1,A,1)
ops.fix(N,1,1)

ops.timeSeries('Linear',1)
ops.pattern('Plain',1,1)
for i in range(1,N):
    ops.load(i,0,-w*dX)

Nsteps = 10
ops.integrator('LoadControl',1/Nsteps)

ops.system('UmfPack')
ops.test('RelativeNormDispIncr',1e-10,100,1)
ops.analysis('Static','-noWarnings')

ops.analyze(Nsteps)
ops.reactions()

R = ops.reaction(N,1)
u = ops.nodeDisp(int(N/2),2)
print(R,w*L**2/(8*u))

You can verify that the computed reaction and the closed-form expression based on the deflection are close (1404 lb vs. 1416 lb in this example). These values should converge as more elements are used along the cable.

The deflected shape of the cable (drawn using opsvis) is shown below with a 10x scale factor.

Cable subjected to self-weight

For three-dimensional analysis, you’ll get a singular stiffness matrix if the nodes lie in a plane, so you’ll have to jitter or zig-zag the nodes slightly out of plane in addition to giving an initial downward sag.