OpenSees Cloud
OpenSees AMI
No Reaction
Original Post - 20 Nov 2024 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
As the old mantra goes, “you can displace without deforming, but you can’t deform without displacing”.
Other than a post here and there on particle dynamics, the examples on this site deal with element deformation (or strain), which requires nodal displacement. But what about examples with elements that undergo only rigid body displacement with no deformation?
Consider a cantilever that undergoes a support displacement, u. There are no applied loads.
A simple assertion is that the displacement at the free end of the cantilever is the same as the imposed support displacement. Another outcome of the model being statically determinate is that the support displacement should not generate any reactions.
import openseespy.opensees as ops
from math import isclose
L = 48
E = 29000
A = 20
I = 800
ops.wipe()
ops.model('basic','-ndm',2,'-ndf',3)
ops.node(1,0,0); ops.fix(1,1,1,1)
ops.node(2,L,0)
ops.section('Elastic',1,E,A,I)
ops.beamIntegration('Legendre',1,1,2)
ops.geomTransf('Linear',1)
ops.element('dispBeamColumn',1,1,2,1,1)
u = 1.0
ops.timeSeries('Constant',1)
ops.pattern('Plain',1,1)
ops.sp(1,2,u)
ops.constraints('Transformation')
ops.analysis('Static','-noWarnings')
ops.analyze(1)
assert isclose(u,ops.nodeDisp(2,2))
ops.reactions()
for dof in [1,2,3]:
assert isclose(0.0,ops.nodeReaction(1,dof),abs_tol=1e-10)
The only gotcha for this assertion is that you cannot use the Plain
constraint handler because a fixed node has an imposed displacement (via
the sp command inside a load pattern). Also, if you forget to issue the
reactions
command, you will always get zero reactions
for the wrong reason.
This test is a good sanity check if you are developing a new element (or testing current elements) because a stiffness matrix and load vector must be assembled to solve this problem. And the test is not limited to frame elements. You can impose support displacements on any stable, statically determinate model and know exactly what the nodal displacements will be and that the reactions should be zero.
For this model, what assertions would you make on the free end displacement and rotation when imposing a support rotation instead of a support displacement?