SOFA API  7352f41a
Open source framework for multi-physics simuation
sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager > Class Template Reference

#include <SparseLDLSolver.h>

Inheritance diagram for sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >:

Public Attributes

int numStep
 
- Public Attributes inherited from sofa::component::linearsolver::ordering::OrderingMethodAccessor< TBase >
SingleLink< OrderingMethodAccessor, core::behavior::BaseOrderingMethod, BaseLink::FLAG_STRONGLINKl_orderingMethod
 

Protected Attributes

type::vector< sofa::SignedIndex > Jlocal2global
 
sofa::linearalgebra::FullMatrix< RealJLinvDinv
 
sofa::linearalgebra::FullMatrix< RealJLinv
 
sofa::linearalgebra::CompressedRowSparseMatrix< RealMfiltered
 
- Protected Attributes inherited from sofa::component::linearsolver::direct::SparseLDLSolverImpl< TMatrix, TVector, NoThreadManager >
Data< boold_precomputeSymbolicDecomposition
 If true the solver will reuse the precomputed symbolic decomposition. Otherwise it will recompute it at each step. More...
 
core::objectmodel::lifecycle::DeprecatedData d_applyPermutation
 
Data< int > d_L_nnz
 Number of non-zero values in the lower triangular matrix of the factorization. The lower, the faster the system is solved. More...
 
type::vector< RealTmp
 
type::vector< RealY
 
type::vector< int > Lnz
 
type::vector< int > Flag
 
type::vector< int > Pattern
 
type::vector< int > tran_countvec
 

Public Member Functions

 SOFA_CLASS (SOFA_TEMPLATE3(SparseLDLSolver, TMatrix, TVector, TThreadManager), SOFA_TEMPLATE3(SparseLDLSolverImpl, TMatrix, TVector, TThreadManager))
 
void init () override
 
void parse (sofa::core::objectmodel::BaseObjectDescription *arg) override
 
void solve (Matrix &M, Vector &x, Vector &b) override
 
void invert (Matrix &M) override
 
bool doAddJMInvJtLocal (ResMatrixType *result, const JMatrixType *J, SReal fact, InvertData *data)
 
bool addJMInvJtLocal (TMatrix *M, ResMatrixType *result, const JMatrixType *J, SReal fact) override
 
MatrixInvertDatacreateInvertData () override
 
- Public Member Functions inherited from sofa::component::linearsolver::direct::SparseLDLSolverImpl< TMatrix, TVector, NoThreadManager >
 SOFA_CLASS (SOFA_TEMPLATE3(SparseLDLSolverImpl, TMatrix, TVector, NoThreadManager),)
 
- Public Member Functions inherited from sofa::component::linearsolver::ordering::OrderingMethodAccessor< TBase >
 SOFA_CLASS (OrderingMethodAccessor, TBase)
 
 OrderingMethodAccessor ()
 
 ~OrderingMethodAccessor () override=default
 
void init () override
 
void parse (sofa::core::objectmodel::BaseObjectDescription *arg) override
 

Protected Member Functions

 SparseLDLSolver ()
 
bool factorize (Matrix &M, InvertData *invertData)
 
void showInvalidSystemMessage (const std::string &reason) const
 
- Protected Member Functions inherited from sofa::component::linearsolver::direct::SparseLDLSolverImpl< TMatrix, TVector, NoThreadManager >
 SparseLDLSolverImpl ()
 
void solve_cpu (Real *x, const Real *b, SparseLDLImplInvertData< VecInt, VecReal > *data)
 
void LDL_ordering (int n, int nnz, int *M_colptr, int *M_rowind, Real *M_values, int *perm, int *invperm)
 
void LDL_symbolic (int n, int *M_colptr, int *M_rowind, int *colptr, int *perm, int *invperm, int *Parent)
 
void LDL_numeric (int n, int *M_colptr, int *M_rowind, Real *M_values, int *colptr, int *rowind, Real *values, Real *D, int *perm, int *invperm, int *Parent)
 
void factorize (int n, int *M_colptr, int *M_rowind, Real *M_values, SparseLDLImplInvertData< VecInt, VecReal > *data)
 

Attribute details

◆ JLinv

template<class TMatrix , class TVector , class TThreadManager = NoThreadManager>
sofa::linearalgebra::FullMatrix<Real> sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::JLinv
protected

◆ JLinvDinv

template<class TMatrix , class TVector , class TThreadManager = NoThreadManager>
sofa::linearalgebra::FullMatrix<Real> sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::JLinvDinv
protected

◆ Jlocal2global

template<class TMatrix , class TVector , class TThreadManager = NoThreadManager>
type::vector<sofa::SignedIndex> sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::Jlocal2global
protected

◆ Mfiltered

template<class TMatrix , class TVector , class TThreadManager = NoThreadManager>
sofa::linearalgebra::CompressedRowSparseMatrix<Real> sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::Mfiltered
protected

◆ numStep

template<class TMatrix , class TVector , class TThreadManager = NoThreadManager>
int sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::numStep

Constructor details

◆ SparseLDLSolver()

template<class TMatrix , class TVector , class TThreadManager >
sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::SparseLDLSolver
protected

Function details

◆ addJMInvJtLocal()

template<class TMatrix , class TVector , class TThreadManager >
bool sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::addJMInvJtLocal ( TMatrix *  M,
ResMatrixType result,
const JMatrixType J,
SReal  fact 
)
override

◆ createInvertData()

template<class TMatrix , class TVector , class TThreadManager = NoThreadManager>
MatrixInvertData* sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::createInvertData ( )
inlineoverride

◆ doAddJMInvJtLocal()

template<class TMatrix , class TVector , class TThreadManager >
bool sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::doAddJMInvJtLocal ( ResMatrixType result,
const JMatrixType J,
SReal  fact,
InvertData data 
)

◆ factorize()

template<class TMatrix , class TVector , class TThreadManager >
bool sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::factorize ( Matrix M,
InvertData invertData 
)
protected

◆ init()

template<class TMatrix , class TVector , class TThreadManager >
void sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::init ( void  )
override

◆ invert()

template<class TMatrix , class TVector , class TThreadManager >
void sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::invert ( Matrix M)
override

◆ parse()

template<class TMatrix , class TVector , class TThreadManager >
void sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::parse ( sofa::core::objectmodel::BaseObjectDescription arg)
override

◆ showInvalidSystemMessage()

template<class TMatrix , class TVector , class TThreadManager >
void sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::showInvalidSystemMessage ( const std::string &  reason) const
protected

◆ SOFA_CLASS()

template<class TMatrix , class TVector , class TThreadManager = NoThreadManager>
sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::SOFA_CLASS ( SOFA_TEMPLATE3(SparseLDLSolver< TMatrix, TVector, TThreadManager >, TMatrix, TVector, TThreadManager)  ,
SOFA_TEMPLATE3(SparseLDLSolverImpl, TMatrix, TVector, TThreadManager)   
)

◆ solve()

template<class TMatrix , class TVector , class TThreadManager >
void sofa::component::linearsolver::direct::SparseLDLSolver< TMatrix, TVector, TThreadManager >::solve ( Matrix M,
Vector x,
Vector b 
)
override