OpenSees Cloud

OpenSees AMI

Something, Something, Something Fiber

Original Post - 27 Feb 2022 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


Two recent inquires asked why model response using frame elements with elastic fiber sections, i.e., sections with fibers whose stress-strain response is \(\sigma=E\varepsilon\), differs from the response with elastic elements, i.e., defined by E, A, Iz, and Iy, either with elasticBeamColumn elements or nonlinear elements with elastic sections.

I’ve touched on this subject a few times–first in this post, most recently in this post, and probably a few times in between–but I’ve never addressed the issue head on.

So, for linear-elastic stress-strain response, how well do rectangular and circular cross-sections with midpoint fiber integration match the exact solutions for section stiffness EA, EIz, and EIy? Shown below are sections with 16 fibers: 4x4 grid for rectangular and 4 rings (radial) and 4 wedges (circumferential) for circular.

4x4 fibers in rectangular and circular sections

As we increase the number of fibers, the computed section stiffnesses converge to the exact values for the rectangular section.

Rectangular section

And likewise for the circular section.

Circular section

For both sections, the axial stiffness is fine, but the flexural stiffnesses are not. The issue is that the section needs to integrate y2 and z2 to get the exact Iz and Iy, respectively. Midpoint integration cannot integrate quadratic polynomials exactly, so there will always be an integration error for the flexural stiffness.

But to get within 5% of the exact flexural stiffness for rectangular and circular sections, grids on the order of 8x8 are sufficient. For 2D sections, this translates into only 8 layers.



As an aside, see what happens when you use more than 10,000 fibers in a section–something you should never do in the first place. I would show what happens but then someone might think it’s a valid result, so I’ll refrain.

Those of you savvy with C++ can see what will happen when numFibers exceeds 10,000 in FiberSection3d.cpp. It’s not good.

Source code for FiberSection3d.cpp

We should spit out some stern warnings when numFibers exceeds 10,000. Maybe this condition should trigger a justifiable call to the exit() function–maybe it also explains why you get crap results when using more than 10,000 fibers per section.



Back to the main point. In the elastic range of response, the section stiffness will always be less than the “exact” stiffness, making the response of frame models with elastic fiber sections a little more flexible than models with elastic frame elements. As a result:

In the inelastic range, the section response will usually give higher strengths than the “exact” solutions when using midpoint integration. However, it’s kinda like all bets are off after yield, especially if you’re dealing with reinforced concrete sections. For more information, see Kostic and Filippou (2012).