Solvers MUMPS and PARDISO are different from TAUCS and UMFPACK in respect that they posses more functionality within the same interface. For example they can work with positive definite, indefinite or unsymmetric matrices and the switch is done through a single variable. They also support out-of-core and this setting is controlled by another variable.

The LinearSolver interface for historical reasons allows us to pass one string only and this string has been reserved in the TAUCS implementation as a reordering scheme. It could be possible to develop more solvers (as in the case of TAUCS) but such a solution does not fit well solver interfaces. It could be possible to pass an array of strings or to change the meaning of the information in the string but this would require the change in the TAUCS implementation. As a quick fix, the solution was to employ two global variables `MUMPSpositive`

and `MUMPSoutofcore`

to take a decision.

The logic is as follows. If the matrix is unsymmetric then the solvers are switched to the LU factorization, here there is no ambiguity. If the matrix however symmetric, then the variable `MUMPSpositive is`

is checked. If it is true, then the solvers are switched to LTL factorization, if false then to LTDL factorization. The former is faster and set by default but it is applicable to posititive definite matrices only. The second choice is a bit slower but it is working for all symmetric matrices including indefinite. The similar situation is with `MUMPSoutofcore`

. If it is equal to zero (default), then the in-core solver is employed, if to one, then out-of-core.

Otherwise the implementation is similar to that for UMFPACK. There is one class MUMPS in solver_mumps.cpp and one class PARDISO in solver_pardiso.cpp. The implementation is straightforward according to the documentation.

## Previous

Introduction

Class Matrix

Class SparseMatrix

Sample code in C++ to run TAUCS

Sample code in C++ to run MUMPS

Class LinearSolver

Class UMFPACK

Class TAUCS

## Next

Gluing all together: LinearSolver::create

Sample driver to run a sparse solver

RSS