ParGeMSLR
ParGeMSLR Documentation

ParGeMSLR: A MPI based parallel hierarchical low-rank preconditioner (Version 1.0.0)

ParGeMSLR (Parallel Generalized Multilevel Schur Low-Rank) is a MPI-based C++ library.
This is a distributed-memory Multilevel Low-Rank Preconditioning and Solution package for the solution of large and sparse (non)symmetric linear systems of equations.
The Parallel GeMSLR preconditioner is purely algebraic and is based on a multilevel reordering of the original set of equations/variables. The reordering is implemented by hierarchically ordering the interface degrees of freedom at each level and several reordering schemes are available. At each given level, GeMSLR decouples (via ParMETIS) the solution of the current linear system into one associated with the interior variables and another associated with the interface ones. The first subproblem is block-diagonal and solved in parallel by applying some form of ILU preconditioning. The recursive nature of the preconditioner appears on the second subproblem where the Schur complement linear system is reconditioned by the interface coupling matrix. The latter is applied by descending to the next level until the last level is reached. In the latter case, the user can choose to use either Block Jacobi acceleration or redundantly solve the problem by (I)LU. Low-rank correction terms can be added at each level to further enhance robustness, and these are applied using the Woodbury formula.

ParGeMSLR

For questions/feedback send e-mail to Yousef Saad [saad@.nosp@m.umn..nosp@m.edu] or Tianshi Xu [xuxx1.nosp@m.180@.nosp@m.umn.e.nosp@m.du].

DESCRIPTION OF CONTENTS

INSTALLATION

  • Package
    1. Edit makefile.in. Set the path of BLAS, LAPACK, and ParMETIS (using INT_64 for ParMETIS). Change compile options.
    2. Make the library with make command.
  • Tests
    1. Make the library.
    2. For sequential tests, go to folder TESTS/sequential.
    3. For parallel tests, go to folder TESTS/parallel.
    1. Make those tests with make command.

SAMPLE RUNS

  • Sequential version
    • ./driver_gen_gemslr_seq.ex
      • Solve general real matrix with GeMSLR.
      • Read solver/preconditioner settings from file "inputs".
      • Load matrix from file "matfile_real".
    • ./driver_gen_gemslrz_seq.ex
      • Solve general complex matrix with GeMSLR.
      • Read solver/preconditioner settings from file "inputs".
      • Load matrix from file "matfile_complex".
    • ./driver_laplacian_gemslr_seq.ex -fromfile inputs_user
      • Solve real Laplacian matrix with GeMSLR.
      • Read solver/preconditioner settings from file "inputs_user".
      • Load matrix from file "lapfile_real".
    • ./driver_laplacian_gemslrz_seq.ex -fromfile inputs_user -outfile out.log
      • Solve compplex Laplacian matrix with GeMSLR.
      • Read solver/preconditioner settings from file "inputs_user", write output to "out.log"
      • Load matrix from file "lapfile_complex".
  • Parallel version
    • mpirun -np 2 ./driver_gen_gemslr_par.ex
      • Solve general real matrix with GeMSLR.
      • Read solver/preconditioner settings from file "inputs".
      • Load matrix from file "matfile_real".
    • mpirun -np 2 ./driver_gen_gemslrz_par.ex
      • Solve general complex matrix with GeMSLR.
      • Read solver/preconditioner settings from file "inputs".
      • Load matrix from file "matfile_complex".
    • mpirun -np 2 ./driver_laplacian_gemslr_par.ex -fromfile inputs_user
      • Solve real Laplacian matrix with GeMSLR.
      • Read solver/preconditioner settings from file "inputs_user".
      • Load matrix from file "lapfile_real".
    • mpirun -np 2 ./driver_laplacian_gemslrz_par.ex -fromfile -outfile out.log
      • Solve compplex Laplacian matrix with GeMSLR.
      • Read solver/preconditioner settings from file "inputs", write output to "out.log"
      • Load matrix from file "lapfile_complex".