TridiagLU
1.0
Scalable, parallel solver for tridiagonal system of equations
|
TridiagLU is a distributed-memory solver for non-periodic, tridiagonal (including block tridiagonal) systems of equations. It is written completely in C, and uses the MPICH (https://www.mpich.org/) library. The following solvers are available:
Notes:
References for the algorithm implemented in tridiagLU() and blocktridiagLU():
The code is available at: https://bitbucket.org/deboghosh/tridiaglu.
It can be cloned using git as follows:
Bitbucket also allows downloading the package, see https://bitbucket.org/deboghosh/tridiaglu/downloads.
Copy the header files in /include to the include directory of the code, and copy the source files in /src/TridiagLU to the source directory of the code, and compile as usual.
Note: for tridiagScaLPK() to be available, compile with -Dwith_scalapack flag.
See test_mpi() and test_block_mpi() for examples of how to call the solvers.
To generate a local copy of the documentation, run "doxygen Doxyfile" in . The folder /doc should contain the generated documentation in HTML and PDF formats.
A test suite is also available to quickly test the implementation of these solvers. To compile and run the test suite, follow these steps:
Compile:
autoreconf -i [CFLAGS="..."] ./configure [options] make make install
CFLAGS should include all the compiler flags. The flags specific to tridiagLU are:
The configure options can include options such as BLAS/LAPACK location, MPI directory, etc. Type "./configure --help" to see a full list. The options specific to tridiagLU are:
Once everything is compiled, the executable can be run to test the solvers. It needs an input file called "input" with 3 integers: global size of system to test with, number of systems to test with, and number of repeated tests to run for wall time measurement. For example, an input file with the following content
1000 20 500
will solve 20 systems of global size 1000, and 500 solves will be carried out for wall time measurements (see test_mpi() and test_block_mpi() for more details).