SparseLDLSolver
This component belongs to the category of LinearSolver. The role of the SparseLDLSolver is to solve the linear system
To do so, the SparseLDLSolver relies on the method of LDL decomposition. The system matrix will be decomposed
As a direct solver, the SparseLDLSolver computes at each simulation time step an exact solution as follows:
Using a block forward substitution, we successively solve two triangular systems. Between those two resolutions, we need to inverse
It is important to note that this decomposition considers that the system matrix
Note that using permutation, the SparseLDLSolver will apply fill reducing permutation on the rows and the columns of
As the impact of the use of fill reducing permutations on the performances is highly influenced by the repartition of the nodes used to model an object, we advise the users to test which type of permutation is the best suited for their simulations.
Sequence diagram
Usage
The SparseLDLSolver requires the use (above in the scene graph) of an integration scheme, and (below in the scene graph) of a MechanicalObject storing the state information that the SparseLDLSolver will access.
As a direct solver, the SparseLDLSolver might be extremely time consuming for large system. However, it will always give you an exact solution, making the assumption that the system matrix
Direct linear solver using a Sparse LDL^T factorization.
CompressedRowSparseMatrixMat3x3d
Templates:
- CompressedRowSparseMatrixMat3x3d
Target: Sofa.Component.LinearSolver.Direct
namespace: sofa::component::linearsolver::direct
parents:
- SparseLDLSolverImpl
Data
Name | Description | Default value |
---|---|---|
name | object name | unnamed |
printLog | if true, emits extra messages at runtime. | 0 |
tags | list of the subsets the object belongs to | |
bbox | this object bounding box | |
componentState | The state of the component among (Dirty, Valid, Undefined, Loading, Invalid). | Undefined |
listening | if true, handle the events, otherwise ignore the events | 0 |
parallelInverseProduct | Parallelize the computation of the product J*M^{-1}*J^T where M is the matrix of the linear system and J is any matrix with compatible dimensions | 0 |
precomputeSymbolicDecomposition | If true, the solver will reuse the precomputed symbolic decomposition, meaning that it will store the shape of [factor matrix] on the first step, or when its shape changes, and then it will only update its coefficients. When the shape of the matrix changes, a new factorization is computed.If false, the solver will compute the entire decomposition at each step | 1 |
L_nnz | Number of non-zero values in the lower triangular matrix of the factorization. The lower, the faster the system is solved. | 0 |
Links
Name | Description | Destination type name |
---|---|---|
context | Graph Node containing this object (or BaseContext::getDefault() if no graph is used) | BaseContext |
slaves | Sub-objects used internally by this object | BaseObject |
master | nullptr for regular objects, or master object for which this object is one sub-objects | BaseObject |
linearSystem | The linear system to solve | TypedMatrixLinearSystem<CompressedRowSparseMatrixMat3x3d> |
orderingMethod | Ordering method used by this component | BaseOrderingMethod |
CompressedRowSparseMatrixd
Templates:
- CompressedRowSparseMatrixd
Target: Sofa.Component.LinearSolver.Direct
namespace: sofa::component::linearsolver::direct
parents:
- SparseLDLSolverImpl
Data
Name | Description | Default value |
---|---|---|
name | object name | unnamed |
printLog | if true, emits extra messages at runtime. | 0 |
tags | list of the subsets the object belongs to | |
bbox | this object bounding box | |
componentState | The state of the component among (Dirty, Valid, Undefined, Loading, Invalid). | Undefined |
listening | if true, handle the events, otherwise ignore the events | 0 |
parallelInverseProduct | Parallelize the computation of the product J*M^{-1}*J^T where M is the matrix of the linear system and J is any matrix with compatible dimensions | 0 |
precomputeSymbolicDecomposition | If true, the solver will reuse the precomputed symbolic decomposition, meaning that it will store the shape of [factor matrix] on the first step, or when its shape changes, and then it will only update its coefficients. When the shape of the matrix changes, a new factorization is computed.If false, the solver will compute the entire decomposition at each step | 1 |
L_nnz | Number of non-zero values in the lower triangular matrix of the factorization. The lower, the faster the system is solved. | 0 |
Links
Name | Description | Destination type name |
---|---|---|
context | Graph Node containing this object (or BaseContext::getDefault() if no graph is used) | BaseContext |
slaves | Sub-objects used internally by this object | BaseObject |
master | nullptr for regular objects, or master object for which this object is one sub-objects | BaseObject |
linearSystem | The linear system to solve | TypedMatrixLinearSystem<CompressedRowSparseMatrixd> |
orderingMethod | Ordering method used by this component | BaseOrderingMethod |