Non-Prismatic Frame Elements

Long before the BeamIntegration abstraction, there was only Gauss-Lobatto integration for force-based elements, with a single section model copied to each integration point. This made it impossible to use a single element to simulate the response of an RC member with different reinforcing details along its length, or any member that was inherently non-prismatic.

While I was in graduate school, one, possibly two, Italians recognized this limitation and talked me into allowing different section tags to be passed to the force-based element–known as nonlinearBeamColumn at the time.

You can see this input option in TclElmtBuilder.cpp, the original file for parsing the nonlinearBeamColumn element. Search for “-sections” and you’ll see you can input as many section tags as there are Np and the tags will be mapped onto the Lobatto point locations. The command, which should still work in OpenSees.exe, is shown below.

element nonlinearBeamColumn $tag $ndI $ndJ $Np -sections 1 2 ... 1 $transfTag

As far as I can tell, this option was never documented for the nonlinearBeamColumn element. Nor was the option documented for the forceBeamColumn element. Take a look at TclForceBeamColumnCommand.cpp and you’ll see the option, along with a lot of other messy coding, carried over for backward compatibility.

For the conspiracy theorists, no, the OpenSees team was not hiding special features from the community. The truth is the BeamIntegration abstraction and all the ensuing integration approaches made the “-sections” option obsolete. For example, you can use FixedLocation integration or one of its cousins, or one of the plastic hinge integration methods to get different sections along the element length.

But it’s still difficult to map section tags onto the Lobatto point locations. Sure, you can use FixedLocation, but you have to know the Lobatto locations a priori. Besides x=0 and x=L, and x=L/2 for odd Np, can you recall the other Lobatto locations when Np>3? Yeah, me neither. Same mystery if you want to map section tags onto other distributed plasticity integrations such as Legendre. However, there is a workaround, but its explanation gets down in the weeds.

So, to restore the easy approach to make force-based elements non-prismatic when using Gauss-Lobatto integration, PR #683 added a second option for section input in the beamIntegration command.

# Prismatic (current option)
ops.beamIntegration('Lobatto',tag,secTag,Np)

# -or- Non-prismatic (new option)
secTagList = [1,2,...,1] # or whatever
Np = len(secTagList)
ops.beamIntegration('Lobatto',tag,Np,*secTagList)

Similar options were added for Legendre, Radau (not the HingeRadau options), NewtonCotes, Chebyshev, Trapezoidal, Simpson, and CompositeSimpson distributed plasticity. Also, because they are instances of BeamIntegration, you can use these options in other frame element formulations, not just force-based.

These new options will be available in the next release of OpenSees, which should be version 3.4.0.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.