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 beamIntegration 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 integration “FixedLocation 5 $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] ops.beamIntegration('FixedLocation',123,*secTags,*locations) ops.element('forceBeamColumn',1,1,2,1,123)
You can also use beamIntegration objects on other frame elements in OpenSees, including
gradientInelasticBeamColumn, and, although it doesn’t buy you much,