Engineering Notes

Lesson learned OpenSees N.º 04

dispBeamColumn or forceBeamColumn: the element that moves your shear by 56%

Abstract. OpenSees lets you model a column with two element types that look equivalent. Against a real test, one got the shear within 1% and the other overshot by 56%. I explain why, starting from the basic idea.

When a concrete column is pushed to its limit in an earthquake, almost all the damage concentrates in a short zone near the base: the plastic hinge. Steel yields, concrete cracks, and the column “rotates” there as if it had a hinge. The rest of the column barely notices.

A good nonlinear model has to capture that concentration. In OpenSees, that depends on something that looks like a detail: the element type you use for the column. In this note I tell how I found out in my thesis, explain the difference between the two most common elements, and list what I now check before launching thousands of analyses.

How I found it

For my master’s thesis I ran more than 40,000 dynamic analyses on bridge piers of varying diameter and height. Before launching them I validated the model against lab tests from the PEER database (Berry, Parrish and Eberhard, 2004), and the validation looked good.

Months later, answering a reviewer, I noticed something uncomfortable: the validation script and the batch script did not use the same element. Validation used forceBeamColumn. The batch used a single dispBeamColumn per column. I ran the same test with both.

The test

Lehman and Moehle column 415: a circular cantilever with constant axial load, pushed back and forth with growing displacements. Same model in both cases: fiber section, confined concrete with the Mander model, strain-hardening steel, five integration points.

ElementPeak shear error
forceBeamColumn, 1 element≈ +1%
dispBeamColumn, 1 element≈ +56%

That is not a rounding difference. It is a different column.

The explanation with a ruler

Imagine you must draw a curve with a sharp spike, but you only have a ruler. You can draw a straight line that passes “more or less” close, but the spike is gone. That is what happens to dispBeamColumn.

This element starts from displacements and assumes the deflected shape is a cubic polynomial. As a result, inside each element, curvature can only vary along a straight line:

κ(x)=a+b x\kappa(x) = a + b\,x

The plastic hinge is exactly a curvature spike at the base. With a straight line, the element spreads that curvature over the whole column, the base section yields less than it should, and the column comes out stiffer and stronger than it is.

forceBeamColumn does the opposite: it starts from forces. With no loads along the column, the bending moment is a straight line, and that is exact, not an approximation:

M(x)=Mi(1−xL)+MjxLM(x) = M_i \left(1 - \frac{x}{L}\right) + M_j \frac{x}{L}

Each section computes its own curvature from its moment. If the base section yields, its curvature shoots up, and the element allows it. Curvature concentrates where it should.

Can you use dispBeamColumn? Yes, but split the column into several elements, shorter near the base. With just one, the error does not go away.

A test detail that also matters

In the Lehman tests, axial load was applied with bars anchored at the base that rotate with the column. So the test had no P-Delta moment at the base. If you model the test with geomTransf PDelta, you add a moment the test never had. I reproduce the test with geomTransf Linear and model the real bridge with PDelta.

What changed in my thesis

I reran the whole database with forceBeamColumn. On average, drift went up 2% to 9% and shear went down by up to 20%. For the study bridge, the design conclusions held. Where things changed a lot was in the most slender piers (0.80 m diameter, over 17 m tall): before, they did not collapse even at 2.3 g; now they collapse between 1.1 and 1.4 g.

What I check now

  1. The validation script and the batch script use the same function to build the model. Copy-paste drifts apart sooner or later.
  2. I validate the exact element and mesh of the batch, not a “similar” version.
  3. I reproduce the test conditions, geometric transformation included.
  4. A run that does not converge gets flagged as such. Saving the partial maximum as if it were valid hides collapses.

Before you launch ten thousand analyses, run one against a test, with the same code.

About the author

Yordan Rocio Maldonado

Structural engineer, seismic and bridge specialist. CIP 215845

Educational, reference-only content. Opinions are my own and do not represent any employer. On a real project, the engineer of record and the governing code decide.

← Back to notes