Class TAUCS

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


Comments are closed.