BTW is there a doc somewhere? (I was looking for one to make sure I did the correct thing when enabling the direct solver).
if you did that then you did the correct thing, after that you will have to play with joint stiffness to prevent explosion: there are two cases:
1-The deflection is large enough the there there is no way the system matrix become singular, so you can just let it go.
2-foer small deflection it is lithe complex because what have to do is to calculate the Mass Matrix and inverted and calculate the product of the two norms, that's called condition number
http://teal.gmu.edu/ececourses/ece699/notes/note4.html The square root of the number tells you how much the process of pivoting will degenerate on each step. with float that value is around two and a half decimal digits, approximately 200. This also correlate to the ratio to the higher mass divided by the smalls mass (including the inertia)
so basically it comes to an iterative process
1- calcute condition for some joint stiffness
2-if condition number is larger that 100 or 200, reduce stiffed and repeated 1 until k is lower that 200
the for that point you know that the system will always be stable.
another method is by calculating the singular value decomposition of the system matrix, which is eassy for a PSD matrix and repeat the first process unit the ratio of the largest to lowest eigen value is smaller than some value.
Newton 1.xx has that system in, but because it was very slow I took out after I wrote the iterative solver. I may bring it back
Then is also a third method eassy to undernad, and guaranty no explosion.
calculate the main diagonal of the main matrix, and the sum of the absolute value of all the off diagonal values of the road.
then while the diagonal is lower than some larger than 1 factor, say 2.0, time the sum of all the off diagonal then apply some regularization to the off diagonal matrix.
A regularize of a Matrix is a smoothing the process of adding a positive diagonal matrix to the main diagonal for the propose of reducing its condition number.
I experimented with that on the beginning of newton 2.00 but that is also two slow. so I decided to focus on the iterative solver.
At this time I do not vouch for the direct solver. It may be broken because I have been moving things around a little since few verins and I have no tested. Usually when I do that I place ASSERT (0) on the function that are left to revisit.
I am now working on functionality for 3.14 that I will provable unveil thee weekend, I se if I cane get the direct solver working again by them.
In general I focus my attention on the thing that people demand. and with the exception of few users and Goggle sketch up, the direct solver does no have too much demand.
and yes adding the little curvature to the demo, not only newton behaves better everyone else will. Basically the solver has to operates on the area when the only thing that keep the joint together is the penalty that all iterative solvers added the joints to make up for lack of convergence.
The doc? well that is a are where there I have nothing.
I have tried asking people to donate time to make a doc, but not takers.