OpenSees Cloud
OpenSees AMI
Stability Challenge Results
Original Post - 07 Mar 2021 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
I posted a modeling challenge for the famous, perhaps now infamous, three member truss example of OpenSees. The members are very slender, so I wanted to see how well we can account for geometric nonlinearity.
First, the results. There were five entries–three reported a load factor of about 0.47 and two gave a load factor around 0.11.
The upper bound shown in the figure is the load factor at 0.25 horizontal joint displacement resulting from the original linear truss analysis while the lower bound is the load factor one could glean from the controlling ratio of Euler buckling force (K=1) to axial force from linear analysis 3.35/55.3=0.0606. Although all five responses were within these bounds, there was a significant difference in modeling approaches.
Changing each truss element to a single elastic beam-column element with the P-$latex \Delta$ or corotational transformation makes virtually no difference compared to the linear analysis. I believe this was the approach taken by participants 1-3; however, this is a problem of large deformation (P-\(\delta\)), not large displacement, (P-\(\Delta\)).
The approach taken by participants 4 and 5 was to discretize each member into a corotational mesh of elastic beam-column elements. With enough elements, e.g., 4 per member, you can simulate P-\(\delta\) effects. Moments from the top joint induce flexure in the compression members, which in turn leads to buckling. This approach leads to a load factor of about 0.11 as shown below.
The moment resisting joint at the top of the model reduces the effective length (K<1) of the compression members, giving a higher load factor than the 0.0606 lower bound. To get closer to this lower bound, you can add moment releases at the top of each member (using extra nodes and the equalDOF command). However, to initiate buckling, you will need to define the interior nodes of the corotational mesh with a small out of straightness. An initial \(\delta\) in the range of L/1000 to L/500 at mid-length should give the results shown below.
This challenge was not easy–in fact, it was kinda tricky. Thank you everyone who participated.
UPDATE The integrator of choice for this analysis is displacement control. After defining the given reference loads at the top joint of the truss model, let’s say node 4, you can control the horizontal displacement of this node up to the target of 0.25 inch.
ops.timeSeries('Linear',1)
ops.pattern('Plain',1,1)
ops.load(4,100,-50,0)
Umax = 0.25
Nsteps = 50
ops.integrator('DisplacementControl',4,1,Umax/Nsteps)