OpenSees Cloud
OpenSees AMI
Faux Contact Sport
Original Post - 14 Feb 2024 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
In a similar take on sprung masses and friction, it turns out that
ENT
+InitStrain
in a zero length element is also an easy way to fake
one-dimensional contact and impact.
Consider Problem 14-23 from Hibbeler 14th edition. An 8 kg block, 2 m from a spring of stiffness 200 N/m, is given an initial velocity of 5 m/s. The coefficient of kinetic friction between the block and the sliding surface is 0.25.
How far does the block compress the spring? And how far does the block rebound? The hand-calculated answers (0.688 m spring compression and 1.73 m rebound) are shown in the figure below. But how do we get OpenSees to calculate the answers?
Well, one zero length element and two materials is all you need.
- Define an
ENT
material with the spring stiffness, then wrap thatENT
with anInitStrain
material using the initial distance between the block and the spring as the initial strain. - Define a
CoulombDamper
material for kinetic friction. For this simple problem, we know the normal force a priori.
With the model defined, set the block in motion with its initial velocity. The choice of Newmark parameters introduces some numerical damping in the analysis and will kill off friction force oscillations after the block stops moving.
import openseespy.opensees as ops
# Units = N, m, sec
g = 9.81
s0 = 2 # Initial gap
v = 5 # Initial velocity
k = 200 # Spring stiffness
m = 8 # Mass of block
W = m*g
mu = 0.25 # Coefficient of kinetic friction
ops.wipe()
ops.model('basic','-ndm',1,'-ndf',1)
ops.node(1,0); ops.mass(1,m)
ops.node(2,0); ops.fix(2,1)
ops.uniaxialMaterial('ENT',1,k)
ops.uniaxialMaterial('InitStrain',2,1,s0)
ops.uniaxialMaterial('CoulombDamper',3,0,mu*W)
ops.element('zeroLength',1,1,2,'-mat',2,3,'-dir',1,1)
ops.setNodeVel(1,1,v,'-commit')
ops.integrator('Newmark',0.6,0.3)
ops.analysis('Transient','-noWarnings')
dt = 0.005
Tmax = 3.0
while ops.getTime() < Tmax:
ops.analyze(1,dt)
The results of the analysis are shown below. All the sanity checks on local extrema of the block motion check out and the spring force is compression only, as expected. At the peak of spring compression, note the discontinuity in block acceleration that arises from the friction force switching directions to oppose the block motion.
And of course, here’s an animation based on this tutorial.
Now, how to use the Grip N’ Grab material to simulate the block and spring remaining in contact after the spring decompresses?