Ok one basic difference between the algorithm described in the paper and the algorithm used in JOODE:
the algorithm implemented in JOODE is more generalized.
in JOODE we've a flexible lower and upper bound, while in the paper the lower bound is always 0 and there is no upper bound.
So both algorithms try to solve the following Equation (A,b are given, a, f have to be found):
a=Af+b (this is an equivalent problem to Ax = b+w as it's described in lcp.cpp [we really should move that description to our sources, too] )
Now there are different extra conditions (let lo be the lower bound and hi the upper bound):JOODE:
( lo(i) <= f(i) <= hi(i) and a(i) = 0 )
or ( a(i)>0 and f(i) = lo(i) )
or ( a(i)<0 and f(i) = hi(i) )in the paper:
a(i) >= 0 and f(i) >= 0 and a(i)*f(i) = 0
this is equivalent to (for comparison with above):
( 0 <= f(i) <= +infinity and a(i) = 0 )
or ( a(i)>0 and f(i) = 0 )
tomorrow (if I have time) I'll try to make those adjustments to my code. It actually works for contacts with the current algorithm, but it sometimes fails (strange behaviors, or endless loops).
this nub variable (number of unbounded constraints?) has something to do with those bounds I think (maybe no bounds.. hmm)
so I'll still only have to find out, whats that findex stuff's about...