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.