Shear deformations in slender beams are generally not significant compared to flexural deformations. But shear deformation are important in deep beams and short walls, and flexure-shear interaction may be important in the material nonlinear range of response, regardless of aspect ratio.
Enough of the perfunctory, non-committal language–you can find that in the latest issue of <insert journal name>.
Instead, this post will show how to model linear-elastic shear beam response in OpenSees. The simplicity of this post rivals that of a previous post. In a future post, I will discuss material nonlinear flexure-shear response.
OpenSees has three options for shear deformable elastic beams: an elastic formulation and two material nonlinear formulations (displacement-based and force-based). These three options will be shown for a simple W21x62 steel beam.
The exact solution for the rotation at the loaded end is , where is the section shear area. For the given numerical values, the end rotation is 0.0046229 rad with shear deformation and 0.0037335 rad without.
First, similar to
elasticBeamColumn, where you input material and section properties as scalars, you can use the
elasticTimoshenkoBeam element. This element takes the section shear area as input in addition to axial and flexural properties (and torsional properties in 3D). As far as I can tell, this is the closest you will get to the beam element available in SAP2000.
# Steel material E = 29000*ksi nu = 0.3 G = 0.5*E/(1+nu) # W21x62 A = 18.3*inch**2 I = 1330*inch**4 d = 21.0*inch tw = 0.400*inch Av = d*tw ops.geomTransf('Linear',1) ops.element('elasticTimoshenkoBeam',1,1,2,E,G,A,I,Av,1)
An interesting feature of the OpenSees
elasticTimoshenkoBeam element is that it can account for geometric nonlinearity (, or “P-little-delta”) inside the basic system.
The next two options use elastic sections in material nonlinear element formulations. You can pass additional arguments to the standard flexure-only elastic section in order to include shear force-deformation.
# Steel material E = 29000*ksi nu = 0.3 G = 0.5*E/(1+nu) # W21x62 A = 18.3*inch**2 I = 1330*inch**4 d = 21.0*inch tw = 0.400*inch Av = d*tw alpha = Av/A # Or just specify alpha directly secTag = 1 ops.section('Elastic',secTag,E,A,I,G,alpha)
Note that the input for section shear is based on a shear shape factor, , where .
Despite what anyone may tell you, including shear force-deformation within force-based elements is nothing new. Using force-based elements is probably the most widely known approach to modeling shear in beam-columns with OpenSees. Simply define a beam integration built on shear sections, then pass the beam integration to the element.
ops.geomTransf('Linear',23) Np = 3 ops.beamIntegration('Lobatto',5,secTag,Np) ops.element('forceBeamColumn',1,1,2,23,5)
You can also use the same elastic shear sections in a
timoshenkoBeamColumn element. The element formulation is the same as
dispBeamColumn, but interpolates constant shear deformation along the element length in addition to constant axial deformation and linear curvature. The input format for
timoshenkoBeamColumn is also identical to that for
forceBeamColumn. Note that if you use a section with shear force-deformation in
dispBeamColumn, there will be no error and shear effects will be ignored.
ops.geomTransf('Linear',18) Np = 2 ops.beamIntegration('Legendre',31,secTag,Np) # Include shear ops.element('timoshenkoBeamColumn',1,1,2,18,31) # Shear will be ignored #ops.element('dispBeamColumn',1,1,2,18,31)
According to the logs, I added the TimoshenkoBeamColumn2d class to GitHub in April 2019. However, some files on a server in Eastchester tell me I wrote this element some time before 2007. Why did it take me so long to get this element into source control? Most likely, I never used the element. Put your stuff in GitHub ASAP before you forget.
For now, there is only a 2D version of the
timoshenkoBeamColumn element. When the 3D version is implemented, this formulation should replace the
dispBeamColumn element so that the displacement-based and force-based formulations are on equal footing when it comes to shear.
Building on the model described in a previous post, verify you get the expected end rotation when using the
elasticTimoshenkoBeam element and
timoshenkoBeamColumn elements with elastic shear sections. Also verify you get the expected flexure-only end rotation when passing the elastic shear section to a
6 thoughts on “Elastic Shear Beams in OpenSees”
Sir, elasticBeamColumn with shear shape factors is same as Sap2000’s frame element, not Timoshenko. In elasticBeamColumn with shear deformations, plane sections perpendicular to the axis do not remain perpendicular because of shear deformation. It also gives same result with http://edwilson.org/BOOK-Wilson/F-beam.pdf beam element (Wilson Frame). Also, Timoshenko beam performs poor. Please look http://edwilson.org/BOOK-Wilson/08-bend.pdf It is the frame version of PQ2 element at page 8-11. If you make 2/3 coefficient zero at 8.20 (or deltateta=0) you get Timoshenko Beam from Wilson Frame. Also his shear plate is similar to elasticBeamColumn with shear deformations. It is also same as his frame element (appendix) in terms of resulting displacements. if you set shear to zero like 8.21, you obtain Discrete Kirchhoff element which is the plate version of elasticBeamCoulmn with no shear deformation. It is the Bernoulli beam without shear deformations. By the way, in my calculations I used reduced integration version of Timoshenko Beam
I wrote this post to show what’s available in OpenSees for including shear deformation in frame elements. But thank you for the assessment.
Dear Prof. Scott, thank you for all the information in your blog, it is very useful.
I would like to ask you the following:
In the opsvis example “demo_cantilever_3el_3d.py” I tried to replace the elasticBeamColumn elements with the 3D ElasticTimoshenkoBeam element just for check it, but the command opsv.plot_model() did not work for this 3D element:
ops.element(‘ElasticTimoshenkoBeam’, 1, 1, 2, E, G, A, J, Iy, Iz, A, A, gTTagz)
ops.element(‘ElasticTimoshenkoBeam’, 2, 2, 3, E, G, A, J, Iy, Iz, A, A, gTTagx)
ops.element(‘ElasticTimoshenkoBeam’, 3, 3, 4, E, G, A, J, Iy, Iz, A, A, gTTagy)
I used a shear shape factor equal to one, just for simplicity. No opsvis graphs were obtained with these modifications to the original example (maintaining unchanged the rest of the code). Instead, I got an error related to the command opsv.plot_model():
“line 617, in _plot_model_3d
ax.quiver(xt, yt, zt, g[0, 0], g[0, 1], g[0, 2], color=’g’,
IndexError: index 0 is out of bounds for axis 1 with size 0”
I appreciate your attention to this query.
You can create an issue about this on the opsvis GitHub site.