OpenSees Cloud
OpenSees AMI
Force-Based Beam-Column Integration Options
Original Post - 02 Nov 2020 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
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
.