OpenSees Cloud
OpenSees AMI
The Three-Act Verification
Original Post - 12 Oct 2025 - Michael H. Scott
Show your support at Buy Me a Coffee.
Although I would like to write more posts on OpenSees verification examples, I believe a post still needs context, or a story, to not become a dull trope.
“I found this example, here’s the OpenSees model and some assertions, and look, the assertions pass” is not a compelling three-act structure of setup, confrontation (or conflict), and resolution.
The hardest act to nail when describing a verification example, or any piece of technical writing, is the setup. The setup should address why the example is important and why you should care. And with a blog post, you can add personal touches that you won’t find in technical publications.
Setup
As a civil engineering undergraduate, I was fortunate to take two courses (one required, one elective) on structural analysis using a textbook written by the professor of the two classes. The book, Structural Analysis written by J.C. Smith, has a lot of practical examples and details of computerized implementation. The figures use thick black lines for frame members, nothing fancy. In hindsight, I see the roots of my own aesthetic.
The last two chapters of the book, chapters 15 and 16, deal with second order analysis. I’m pretty sure we didn’t get to these chapters by the end of the second course. But looking at the material now, I see several examples that OpenSees should be able to handle.
Confrontation
Example 15.2 from J.C.’s book is of an L=300 inch fixed-fixed steel frame member with E=29000 ksi and I=300 inch4. Although not specified, probably something akin to a W10x54. An off-center 100 kip point load and an axial load of \(0.5\pi^2 EI/L^2\)=477 kip are applied to the member.
Using direct assembly of the member stiffnesses with stability functions and ignoring axial deformations, J.C. reports the following response quantities:
Response | Magnitude | Direction |
---|---|---|
Deflection under the 100 kip load | 1.2774 inch | Down |
Rotation under the 100 kip load | 0.0099534 rad | CCW |
Moment reaction at the left end | 2504.0 kip-inch | CCW |
Moment reaction at the right end | 4852.7 kip-inch | CW |
To model the frame member in OpenSees, we can use either two
forceBeamColumnCBDI
elements or two mixedBeamColumn
elements with
the -geomNonlinear
option. We can also use several elasticBeamColumn
elements in a mesh of large displacement transformations, but I want to
be consistent with J.C.’s use of two elements in the example. Plus, a
corotational mesh analysis won’t match the direct stiffness approach
anyway.
An OpenSees model for the fixed-fixed frame member is shown below. The
only thing to note is there are four Gauss points for the
forceBeamColumnCBDI
elements in order to obtain an accurate
approximation of the transverse deflections for \(P\)-\(\delta\) effects.
import openseespy.opensees as ops
kip = 1.0
inch = 1.0
ksi = kip/inch**2
E = 29000*ksi
A = 15*inch**2
I = 300*inch**4
ops.wipe()
ops.model('basic','-ndm',2,'-ndf',3)
ops.node(1,0,0); ops.fix(1,1,1,1)
ops.node(2,200*inch,0)
ops.node(3,300*inch,0); ops.fix(3,0,1,1)
ops.geomTransf('PDelta',1)
ops.section('Elastic',1,E,A,I)
ops.beamIntegration('Legendre',1,1,4)
ops.element('forceBeamColumnCBDI',1,1,2,1,1)
ops.element('forceBeamColumnCBDI',2,2,3,1,1)
#ops.element('mixedBeamColumn',1,1,2,1,1,'-geomNonlinear')
#ops.element('mixedBeamColumn',2,2,3,1,1,'-geomNonlinear')
ops.timeSeries('Constant',1)
ops.pattern('Plain',1,1)
ops.load(2,0,-100*kip,0)
ops.load(3,-477*kip,0,0)
ops.analysis('Static','-noWarnings')
ops.analyze(1)
ops.reactions()
Will the deflection and rotation of node 2 and the moment reactions at nodes 1 and 3 match the textbook solution?
Resolution
The results of the OpenSees analyses using the forceBeamColumnCBDI
and
mixedBeamColumn -geomNonlinear
elements are shown below.
Response | Direct Stiffness | CBDI | Mixed |
---|---|---|---|
Deflection (inch) under the 100 kip load | 1.2774 | 1.2765 | 1.2765 |
Rotation (rad) under the 100 kip load | 0.0099534 | 0.0099467 | 0.0099469 |
Moment reaction (kip-inch) at the left end | 2504.0 | 2503.2 | 2503.1 |
Moment reaction (kip-inch) at the right end | 4852.7 | 4855.2 | 4855.2 |
All computed results are within 0.1% of the textbook solution that used direct stiffness. I’d say that’s a successful resolution of the story and the protagonist can move on to other posts and verification examples.