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
ops.beamIntegration('Lobatto',123,3,5)
ops.element('forceBeamColumn',1,1,2,1,123)
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)
ops.beamIntegration('FixedLocation',123,N,*secTags,*locations)
ops.element('forceBeamColumn',1,1,2,1,123)
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
.
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
LikeLike
Hello Quan,
I’m not sure what you mean by a “4-node” element. Consider the OpenSees message board or, if you would like, you can schedule a one-on-one consultation: https://www.silviasbrainery.com/one-on-one-training
PD
LikeLike
Thank you for your reply. I have solved this problem. The main reason is that I don’t fully understand the beam column element
LikeLiked by 1 person
Dear P.D.,
What is the difference between ForceBeamColumnCBDI2d and other force-based elements?
Best
LikeLike
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: https://doi.org/10.1061/(ASCE)0733-9445(1998)124:6(704)
Remo D’Souza extended the formulation to material nonlinearity, but no journal paper; however, this paper describes the formulation a little bit:
http://dx.doi.org/10.1061/(ASCE)ST.1943-541X.0000757
PD
LikeLike
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
LikeLiked by 1 person
Thanks! You are right. I have fixed it.
LikeLike