Force-Based Beam-Column Integration Options

I like numerical integration because it allows you to do a lot of interesting things with force-based frame elements–so much more than simulating the response of reinforced concrete moment frames.

Numerous numerical integration options are available in OpenSees, so in 2011 I wrote and uploaded to the OpenSees wiki a PDF summarizing those options. According to Google Scholar, this document has since gone on to accrue more citations than some of my peer-reviewed work.

In the Tcl days, I made the beam integration arguments as string input to the forceBeamColumn command. I’m not sure why I did this, probably equal parts backward compatibility and laziness. This string-based approach to beam integration objects would not fly in Python, so we created the BeamIntegration class complete with tags just like materials.

Pretty much everything translates from Tcl to Python. For example, using five point Lobatto with section tag 3:

# Tcl
set integration "Lobatto 3 5"
element forceBeamColumn 1 1 2 1 $integration

# Python

For the beam integration objects that use lists, you will have to dereference the lists in Python. For example, with fixed location (Vandermonde) integration:

# Tcl
set locations “0.0 0.2 0.5 0.8 1.0”
set secTags “1 2 2 2 1”
set N [llength $secTags]
set integration “FixedLocation $N $secTags $locations”
element forceBeamColumn 1 1 2 1 $integration

# Python
locations = [0.0,0.2,0.5,0.8,1.0]
secTags = [1,2,2,2,1]
N = len(secTags)

You can also use beam integration objects on other frame elements in OpenSees, including mixedBeamColumn, gradientInelasticBeamColumn, and, although it doesn’t buy you much, dispBeamColumn.

16 thoughts on “Force-Based Beam-Column Integration Options

  1. Your article is very detailed, but I encountered some problems when using the nonlinearBeamColumn element,

    1/I use a 4-node nonlinearBeamColumn element to simulate the pier, and mass was set on the top of the pier. However, when I conduct seismic response analysis, I find that the stiffness of the element is not the same as what I need (3EI / L ^ 3). How can I modify My or Mz direction through the section aggregator to achieve the desired result?

    2. I found that I analyzed the seismic response of the above model and found that the structure response is less than the results of single degree of freedom (same mass and stiffness) ,What is the cause of this?

    I am looking forward to your reply. Thank you


    1. Hello MSB,
      The CBDI elements account for P-little delta inside the basic system using curvature-based displacement interpolation (CBDI).
      This paper describes the linear-elastic case:
      Remo D’Souza extended the formulation to material nonlinearity, but no journal paper; however, this paper describes the formulation a little bit:


  2. Dear Professor,

    first of all I would like to express my gratitude for your work.

    I leave this small comment since I am pretty sure that there is a small typo in this article. More precisely, the tcl snippet code it is written correctly but an argument is missing in the python counterpart: the number of IPs along the element. To this end, I would suggest to modify in: “ops.beamIntegration(‘FixedLocation’,123,len(secTagsCol),*secTagsCol,*locations)”.
    If something is wrong I apologise to bother you, please ignore this message.

    Kind regards.
    Calò Mattia

    Liked by 1 person

Leave a Reply to Michael H. Scott Cancel reply

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

You are commenting using your 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.