Faux Contact Sport

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.

  1. Define an ENT material with the spring stiffness, then wrap that ENT with an InitStrain material using the initial distance between the block and the spring as the initial strain.
  2. 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?

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.