TAUCS library contains several solvers and there are accordingly more classes in solver_taucs.cpp. Each solver has its own class:
TAUCSllt
– Cholesky decomposition column by column (slow);TAUCSldlt
– LDLT factorization for indefinite matrices (slow);TAUCSllt_mf
– Multifrontal supernodal Cholesky decomposition (the best among TAUCS library for positive definite matrices);TAUCSllt_ll
– Left-looking supernodal Cholesky decomposition;TAUCSllt_ooc
– Out-of-core sparse Cholesky decomposition;TAUCSlu
– Out-of-core sparse pivoting LU decomposition (rather slow);
but there are two more classes: TAUCS
and TAUCSdirectLLT
. The reason is that there is a general TAUCS infrastructure and many functions are the same for all solvers. As such, only class TAUCS
is derived from LinearSolver
and it implements functions common for all solvers. What is left are functions factor
, mulInverseByVec
, isSymmetric
and clearFactor
.
The class TAUCSlu
that implements the LU factorization for an unsymmetric matrix is not related to other solvers and it is derived directly from class TAUCS
. In its implementation at the end of the file solver_taucs.cpp you will find four functions that have not been coded in the class TAUCS
.
Other solvers do shares common features and first the class TAUCSdirectLLT
is derived from the class TAUCS
. It contains additional arrays necessary to perform permutations and it implements functions left in the class TAUCS
in terms of two additional pure virtual functions (factoring
and substitution
). Now classes TAUCSllt
, TAUCSldlt
, TAUCSllt_mf
, TAUCSllt_ll
, TAUCSllt_ooc
are derived form TAUCSdirectLLT
and their implementations are very short, it is just a call to the right TAUCS low-level function.
After each solver class there is a function
LinearSolver* make_TAUCS*()
that will be used within LinearSolver::create
.
Previous
Introduction
Class Matrix
Class SparseMatrix
Sample code in C++ to run TAUCS
Sample code in C++ to run MUMPS
Class LinearSolver
Class UMFPACK
Next
Class MUMPS and PARDISO
Gluing all together: LinearSolver::create
Sample driver to run a sparse solver
RSS