OpenSees Cloud

OpenSees AMI

Rigid Joint Offsets

Original Post - 19 Nov 2020 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


The geometric coordinate transformation objects handle rigid joint offsets for frame elements in OpenSees. This is nice because the code for the transformations of displacements and forces is not duplicated in the element state determinations.

There are three things to keep in mind when using rigid joint offsets. First, the offsets are global with respect to the element nodes, making the offsets not invariant to the selection of the element I and J nodes.

Second, and perhaps most obvious, the offsets will change the deformable length of the element. As a result, you have to be careful defining element properties relative to the element length, e.g., plastic hinge lengths.

Finally, the offsets will change the direction of applied member loads (and also the resultant of distributed loads).

Consider an element defined between two nodes with a uniform distributed load. The definitions of the geometric transformation and the distributed load are shown below:

ops.geomTransf('Linear',1)

ops.eleLoad('-ele',1,'-type','beamUniform',-0.8)

For brevity, I omitted intervening commands like element, timeSeries, and pattern. With rigid joint offsets, the commands will be:

ops.geomTransf('Linear',1,'-jntOffset',4.0,1.0,-4.0,-1.0)

ops.eleLoad('-ele',1,'-type','beamUniform',-0.8)

These two cases are shown below.

Beam with rigid offsets and member loads

The rigid joint offsets work for 2D problems with all three types of transformation: Linear, PDelta, and Corotational. For 3D problems, rigid joint offsets are implemented for only the Linear and PDelta transformations.