Archive for the ‘Sparse Matrices’ Category

Domen Stadler Project consist of Visual Studio solution for mumps solver library. It also include input files for testing and a WinForm to modify Mumps source files in order to compile and use them under the 64-bit or 32-bit windows environment. http://sourceforge.net/projects/mumpssolverforvisualstudio/

Below I have documented the compilation of MUMPS 4.10.0 with 8 Byte integers on 64-bit Windows. One may need 8 Byte integers in the case of the serial version of MUMPS when the number of entries in the factor is more than 2^32. METIS For ordering, I employ METIS and it must be compatible with […]

This text and example files are contributed by Carlo de Falco The files are at /files/contrib/carlo.defalco/ I assume that you have already read Sample code in C++ to run MUMPS. The goal in this section is to compare two codes to run the mumps solver in serial and in parallel.  We would like to develop a command line tool that will […]

Domen Stadler Files are in /files/contrib/domen.stadler/ For startes, this work was performed on the Windows XP 32 bit computer, but there is no reason to occur any troubles on other windows platforms. To be able to compile, one would need following software: -MUMPS source code (http://graal.ens-lyon.fr/MUMPS/) (tried with versions 4.8.0 and 4.10.0), -WinMUMPS package (http://sourceforge.net/projects/winmumps/) […]

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 main. Let us now […]

So far we have defined an interface in the class LinearSolver and then implemented it for different solvers: UMFPACK, TAUCS, MUMPS and PARDISO. The implementation in solver_*.cpp uses solvers.h but the application code actually needs almost nothing from these files. The word almost means that it is still necessary to instantiate a particular solver class […]

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 […]

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 – […]

The complete code that implement the LinearSolver interface for the UMFPACK solver is in solver_umfpack.cpp including the declaration of the class UMFPACK. This may look unusual but the reason is quite simple. The declaration of the class UMFPACK is used only to compile the code of the class and it will be never accessed from the application code directly. The […]

Two specialized drivers, run_taucs.cpp and run_mumps.cpp presented previously show a common problem when one needs to deal with a sparse solver. If you expect that in the future you may need to change a sparse solver, you must be then ready to modify the part of your code that works with the sparse solver. For example all algorithms that use […]

I assume that you have already read Sample code in C++ to run TAUCS. The goal in this section is to compare two codes to run different sparse solvers when the purpose of the code is actually quite similar.  We would like to develop a command line tool that will read a matrix and a right-hand side run_mumps […]

Now let us employ Matrix and SparseMatrix to run TAUCS. The goal will be to develop a command line tool that will read a matrix and a right-hand side run_taucs matrix rhs in the Matrix Market format and then writes the solution of the system of linear equations in file rhs.solution also in the Matrix […]

When one programs a dense matrix, basically there is necessary only to decide whether the matrix will be stored column-wise or row-wise. Here there is a huge difference with a sparse matrix where one can find many different storage schemes, see for example Section 2.1 Storage Formats in the SPARSKIT paper http://www-users.cs.umn.edu/~saad/software/SPARSKIT/index.html Each storage scheme has […]

The right-hand-side is usually dense or at least it was the case in my applications. In this case I have used the class Matrix that was already employed previously in sections devoted to dense matrices. I will describe this class in more detail here. The class is declared in matrices.h and actually most functions are defined […]

In this chapter I will show how one can use sparse solvers from C++. I assume that the sparse solvers as well as the optimized BLAS are already available as compiled libraries and the goal would be mere to use them from C++. Note that a sparse direct solver requires matrix reordering and to this […]

Introduction MUMPS is a MUltifrontal Massively Parallel sparse direct Solver developed CERFACS, ENSEEIHT-IRIT, and INRIA: http://graal.ens-lyon.fr/MUMPS/ MUMPS is a free solver but it is necessary to register to download it. It is relatively easy to compile MUMPS under Unix – it is just necessary to slightly modify Makefile.inc, several version of which come with the […]

Introduction In the previous paper I have described how to compile TAUCS: Compiling and Using TAUCS under Microsoft Visual Studio. The goal of this paper is to describe how one can compile TAUCS with -MD option. The problem here is that libraries supplied with TAUCS are compiled with -MT option and it is necessary to […]

Introduction MUMPS is a MUltifrontal Massively Parallel sparse direct Solver developed CERFACS, ENSEEIHT-IRIT, and INRIA: http://graal.ens-lyon.fr/MUMPS/ MUMPS is a free solver but it is necessary to register to download it. It is relatively easy to compile MUMPS under Unix – it is just necessary to slightly modify Makefile.inc, several version of which come with the […]

Introduction TAUCS is a Library of Sparse Linear Solvers developed by Prof Sivan Toledo with Doron Chen and Vladimir Rotkin: http://www.tau.ac.il/~stoledo/taucs/ The goal of this chapter is to consider how to compile TAUCS under Microsoft Visual Studio. The plan is as follows. First we compile TAUCS with nmake from the command line. Then a simple […]

Introduction UMFPACK is Unsymmetric MultiFrontal direct solver for sparse matrices developed by Prof Timothy A. Davis: http://www.cise.ufl.edu/research/sparse/umfpack/ In this document I will explain how to modify configurations files in the UMFPACK distribution in order to compile it directly with Microsoft Visual C by using GNU Make under Cygwin. For simplicity I have limited myself to […]

METIS is written in C by using int and when one uses a solver on a 64-bit system that employs 8-byte integers this must be changed. Recently I have compiled MUMPS with -i8 and this was exactly this case. The newest version of METIS seems have an option to compile METIS with long but it […]

When solving a system of linear equations with a sparse matrix by the direct method, it is crucial to run a reordering algorithm to reduce fill-in in the factor. Without this, it just does not work. METIS is a reordering algorithm developed by Prof Karypis at the University of Minnesota – Karypis Lab. It is […]

  Introduction Fetching and unpacking Compiling without BLAS Compiling with ATLAS Compiling under MinGW Using UMFPACK with Microsoft Visual Studio Introduction UMFPACK is Unsymmetric MultiFrontal direct solver for sparse matrices developed by Prof Timothy A. Davis: http://www.cise.ufl.edu/research/sparse/umfpack/ The goal of this chapter is consider how to compile UMFPACK under gcc. I will use gcc under […]