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:
For brevity, I omitted intervening commands like
pattern. With rigid joint offsets, the commands will be:
These two cases are shown below.
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.