-
Notifications
You must be signed in to change notification settings - Fork 311
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SofaSparseSolver] Introduce FillReducingOrdering #2501
[SofaSparseSolver] Introduce FillReducingOrdering #2501
Conversation
[ci-build][with-all-tests] |
By curiosity, do you think using mt-metis (metis with openmp in a nutshell) could be useful ? |
@fredroy I don't think it's a priority. The reordering is computed only at initialization. And you can always export your new mesh for later use. |
LGTM but the new example |
[ci-build][with-all-tests] |
A new DataEngine is introduced:
FillReducingOrdering
A DataEngine to reorder the degrees of freedom in a mesh in order to reduce fill-in in sparse matrix factorization.
In other terms, the algorithm minimizes the number of non-zeros entries in the factorization of the sparse matrix of a FEM problem by reordering the degrees of freedom.
The implementation is based on METIS.
Note: some of the direct linear solvers embed such a reordering internally (e.g. SparseLDLSolver), but not all of them (e.g SparseLUSolver, SparseCholeskySolver etc).
An example is also introduced (
examples/Components/engine/FillReducingOrdering.scn
).Here is the comparison of the two system matrices:
Initial matrix:
Reordered matrix:
It improves a lot the performances when the linear solver does not embed a fill-in reducing reordering. This is the case of the
SparseLUSolver
in the example scene.Rough framerate without reordering: 2.5 FPS
Rough framerate with reordering: 25 FPS
By submitting this pull request, I acknowledge that
I have read, understand, and agree SOFA Developer Certificate of Origin (DCO).
Reviewers will merge this pull-request only if