OpenSees Cloud

OpenSees AMI

Element Self-Weight

Original Post - 02 Nov 2022 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


A question posted the other day in the OpenSees Facebook group asked how to add self-weight to elements. I gave the easy I-can-answer-this-in-under-two-seconds answer of “use the eleLoad command”.

It turns out the complete answer is not so simple as it depends on the type of element to which you want to apply self-weight.

The OP did not specify the types of elements, so I assumed they meant beam-column elements, for which the beamUniform option is the only approach for applying self-weight. However, gentle pre-processing is required to transform the global self-weight to local uniform loads, as shown below for a plane frame element.

Global and local uniform loads

First, calculate the self-weight per length of the element as the density times section area. Then get the local x, y, and z axes of the element and use inner products to resolve the global self-weight onto the local directions expected by the beamUniform option.

import openseespy.opensees as ops
import numpy as np

rho = 0.284*lb/inch**3 # Steel

A = 20*inch**2 # Or whatever
ops.element('elasticBeamColumn',1,... ,A, ...) # Or whatever

b = [0,-rho*A,0] # Self-weight in global X,Y,Z

ops.timeSeries('Constant',1)
ops.pattern('Plain',1,1)
wx = np.dot(ops.eleResponse(1,'xaxis'),b) # x'*b
wy = np.dot(ops.eleResponse(1,'yaxis'),b) # y'*b
wz = np.dot(ops.eleResponse(1,'zaxis'),b) # z'*b
ops.eleLoad('-ele',1,'-type','-beamUniform',wy,wz,wx)

You can put these distributed load calculations in a loop over multiple elements if necessary–it’ll just take a little data management to make sure you use the correct cross-sectional areas.

Solid elements such as quads and bricks use the selfWeight option for the eleLoad command in conjunction with body forces input with the element command. The element implementations of the addLoad() method handle the self-weight calculations–no script pre-processing necessary. Because there are different issues compared to beam-column elements, I will cover solid element self-weight in another post.