The code in run_sparse_solver.cpp demonstrates how one can use
LinearSolver to programm a tool similar to run_taucs and run_mumps. Yet now the code is written for any sparse solver for that the LinearSolver interface has been implemented. When you start reading the code, it is good first to skip function
readArguments and just browse
Let us now compile and link the code. I have organized a makefile to help us in this endeavour but it is necessary first to define some variables correctly in make.inc. I assume that you have already compiled several solvers and the libraries as well as headers are available at some locations at your hard drive. This information it is necessary to put in make.inc. Let us go through it.
First it is necessary to have a BLAS libraries as all sparse solvers depend on them. This is a variable
BLASLIB and it is set to MKL libraries. If you use some other BLAS, please change it.
Then METIS is used by TAUCS and MUMPS and if you employ them you need to correctly define
METISLOC. It is also necessary to check
METISLIB, if the METIS library name is specifed there correctly.
After that each sparse solver has three variable to define correctly. Let us consider them for TAUCS:
TAUCSINC gives us the location of the headers,
TAUCSLOC does the location of the libraries and
TAUCSLIB does the library name. If you do not want to use TAUCS, just leave
TAUCSLIB blank and the makefile will not use TAUCS. The same concerns UMFPACK, MUMPS and PARDISO. In make.inc for PARDISO two variables
PARDISOLOC are blank. The reason is that this information in the case of PARDISO is specified by means of
INCLUDE environment variables (I use PARDISO from MKL and they have been defined as a part of MKL setup).
INCLUDE could be employed for other solvers as well.
When the information in make.inc is correct,
make in that directory should produce
run_sparse_solver.exe. Try it. I believe that this is a good exercise: to compile and link
run_sparse_solver with a few solvers.
Sample code in C++ to run TAUCS
Sample code in C++ to run MUMPS
Class MUMPS and PARDISO
Gluing all together: LinearSolver::create