OpenSees Cloud
OpenSees AMI
Flipping Rotation Axes
Original Post - 12 Nov 2023 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
Zero length rotational springs are a popular approach to model concentrated plasticity in frame members. Although distributed plasticity formulations are not perfect either, the zero length concentrated plasticity approach has a number of issues: implicit plastic hinge length (at best, it’s a unitless 1) and having to define equalDOF constraints. There’s also the outcomes of artificially high initial spring stiffness: potential ill-conditioning due to exceedingly high initial stiffness, convergence issues due to stiff unloading, and high damping forces with initial stiffness proportional Rayleigh damping, to name a few.
Another issue with zero length rotational springs, and zero length elements in general, is the difference between external and internal sign conventions. Yes, external vs. internal sign convention is an issue for all types of elements, but the issue is amplified for zero length elements because, well, they have no length. Both element nodes are at the same physical location and the definition of the local x-axis is not unique.
This post addresses some of the issues with moment-rotation response in zero length elements and the post is a follow up to a previous post on zero length springs with translational response.
Consider the zero length rotational spring shown below. The moment-rotation behavior of the spring is defined by a material with k=200 and k=100 for positive and negative deformation, respectively. The local x- and y-axes of the element are parallel to the global X- and Y-axes. A counter-clockwise moment of M=10 is applied at node 2. This applied moment represents flexural demand from whatever would be connected to this spring in a frame model.
Performing the analysis, the rotation of node 2 is 0.05, as expected for positive flexure of the spring.
Now, consider the case where the I and J nodes are swapped in the zero length element definition. Everything else about the model remains the same–same local axes, same moment-rotation behavior, same counter-clockwise moment at node 2.
Repeating the analysis, the rotation of node 2 is now 0.1 because we put the spring into negative flexure. Basically, we flipped the local z-axis about which the rotational spring deforms.
To avoid such issues with the canonical beam-with-two-zero-length-rotational-springs concentrated plasticity modeling approach, remember two guidelines.
First, make sure the local axes of your zero length elements are the same as the local axes of your beam element. For 2D models, this check boils down to ensuring all three elements have the same x-axis because z=[0,0,1] is enforced automatically. In 3D, first define your beam element, then use the local x- and y-axes from the beam in the definition of your zero length elements.
ops.geomTransf('Linear',1, *vecxz)
transfTag = 1
ops.element('elasticBeamColumn',1,...,transfTag)
x = ops.eleResponse(1,'xaxis')
y = ops.eleResponse(1,'yaxis')
ops.element('zeroLength',...,'-orient',*x,*y)
Second, define the zero length elements such that the vector pointing from node I to J is in the same direction as the local x-axis. This point is a little more abstract and gets back to the simple example earlier in the post. Basically, keep the order of I and J nodes consistent along the member length, i.e., I-J, I-J, I-J.
Most of the points in this post are irrelevant when you have symmetric flexural response in your moment-rotation springs. But if the flexural response is non-symmetric–be it in stiffness, strength, or hysteresis–then you’ll need to make sure the local axes are defined correctly for your zero length elements.