OpenSees Cloud
OpenSees AMI
Beam With Hinges Interior Redux
Original Post - 30 Nov 2023 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
When it was but a wee blog, I wrote a post expressing second thoughts on how I presented the elastic interior of the beamWithHinges element in Scott and Fenves (2006). The post had a lot of words, but no figures or examples. So, let’s try again.
Consider a simple span comprised of one beamWithHinges
element, i.e., a
forceBeamColumn
element with HingeRadau
integration. The beam has
plastic hinges and a bilinear moment-curvature relationship assigned to
all sections. Point loads of equal magnitude are applied just inside the
plastic hinge regions, giving constant moment over the beam
interior–basically the opposite of what the beamWithHinges
element is
supposed to be good at.
For this simple model, pick your favorite E, A, I, and My for the section, and use an lp that is about 10% of the span length.
If you increase the magnitude of the point loads until the bending moment on the beam interior exceeds the section yield moment, you will get different results with “the-interior-is-elastic” from Scott and Fenves (2006) versus what’s actually implemented in OpenSees.
ops.geomTransf('Linear',18)
ops.uniaxialMaterial('Elastic',1,E*A)
ops.uniaxialMaterial('Hardening',2,E*I,My,0,0.05*E*I)
ops.section('Aggregator',5,1,'P',2,'Mz')
# As described in JSE (2006)
ops.element('beamWithHinges',1,1,2,5,lp,5,lp,E,A,I,18)
# As implemented in OpenSees
ops.beamIntegration('HingeRadau',17,5,lp,5,lp,5)
ops.element('forceBeamColumn',1,1,2,18,17)
ops.timeSeries('Linear',1)
ops.pattern('Plain',1,1)
ops.eleLoad('-ele',1,'-type','beamPoint',-1.0,lp/L)
ops.eleLoad('-ele',1,'-type','beamPoint',-1.0,1-lp/L)
The relationship between applied load and rotation at the supports is shown below, where yielding initiates when the moment on the beam interior exceeds the yield moment.
This example should make it clear that the interior of a “beam with hinges” element does not have to be elastic!