This forum has been archived. All content is frozen. Please use KDE Discuss instead.

Compute sparse Delassus operator in multibody dynamics

Tags: None
(comma "," separated)
alejandrocastro
Registered Member
Posts
15
Karma
0
OS
The Delassus operator commonly shows up in the equations of multibody dynamics with contact.

In matrix form, we have matrix M (a mass matrix, SPD, invertible) and a matrix J, not square in general.

The Delassus operator is defined as W = J⋅M⁻¹⋅Jᵀ.

When both J and M are sparse matrices, is there an efficient way to compute W with Eigen?

Thank you in advance.
andrew-dy
Registered Member
Posts
15
Karma
0
In practice, computing matrix inverses explicitly is very inefficient, so it's worth trying to avoid that.
Because the actual M⁻¹ isn't of interest (but its product with other matrices is), we don't need to generate it, only its action.
Let M be have dimensions (b, b),
and let J have dimensions (a, b),
so that W has dimensions (a, a).

First, let's look at M⁻¹Jᵀ = P which has dimensions (b, a).
For each column, jᵀ of Jᵀ and p of P, we have the system, Mp = jᵀ.
In other words, we only need to solve "a" number of sparse systems of linear equations to get P.
With a sparse symmetric positive definite mass matrix (coming from a mesh), a multigrid-preconditioned conjugate gradient solver should do really well (converging very close to the true p within a handful of iterations).

In this way, you compute the action of M⁻¹ on Jᵀ. Then just multiply JP = W to get the operator.

I don't know if there's a better way, but this method seems more efficient than the naïve approach.


Bookmarks



Who is online

Registered users: bartoloni, Bing [Bot], Google [Bot], Yahoo [Bot]