Apparently Mathematica added some new features in version 9 that are intended to better handle differential equations with discontinuities (see http://reference.wolfram.com/mathematica/tutorial/NDSolveWhe...). Apparently this is getting tripped up at the boundary between the two behaviors.
One simple thing that might work is to change the force law to either
force[disp1_, disp2_, dir_] := -k Abs[(disp1 - disp2).dir ]^(3/2) dir* If[(disp1 - disp2).dir > 0, 1, 0]
or force[disp1_, disp2_, dir_] := -k Abs[(disp1 - disp2).dir ]^(3/2) dir* Piecewise[{{1, (disp1 - disp2).dir > 0}}, 0]
If these don't fix it, then you would need to play around with the options for NDSolve.I'm still a happy 8 user, myself. Is there much reason to upgrade?
It'd probably be good for them to pay more attention to backwards compatibility...
The features I'm most excited about in 10 (disclosure: my team is working on some of these):
[2] String, XML, file templating
[3] Hands-free machine learning
[4] Entity and EntityValue: semantic "hooks" to represent real world entities
[5] Dataset, a general data modelling and query framework.
Also, DateObject, TimeObject, interaction with external processes, multiple undo, a large number of updated data sources, the ExternalService "meta-api", device connections, time series stuff, GeoGraphics, and a long list of no less worthy features.
[1] http://reference.wolfram.com/language/guide/Associations.htm...
[2] http://reference.wolfram.com/language/guide/WorkingWithTempl...
[3] http://reference.wolfram.com/language/guide/MachineLearning....
Any chance you'll be including the templating features in the RPi version?
You don't mean that the GP (taliesinb) is confused, do you?. He works for Wolfram Research, developing Mathematica.
Seriously: I think they will make breaking changes if the existing code turns out to be mathematically incorrect. That may or may not have been the case here.
I was disappointed to find that the associated notebook (http://math.bard.edu/belk/code/BilliardsHertz.nb) doesn't work correctly in either Mathematica 9 or 10 -- I think the author used 8.
It seems like NDSolve falls down:
NDSolve::smpf: Failure to project onto the discontinuity surface when computing Filippov continuation at time 0.`. >>
and the solution shows the cue bool passing through all the others..