Use the filestyle: primmestyle.css for
local html installation.
Symmetric and Hermitian eigenvalue problems enjoy a remarkable theoretical
structure that allows for efficient and stable algorithms for obtaining a few
required eigenpairs. This is probably one of the reasons that enabled
applications requiring the solution of symmetric eigenproblems to push their
accuracy and thus computational demands to unprecedented levels.
Materials science, structural engineering, and some QCD applications
routinely compute eigenvalues of matrices of dimension more than a million;
and often much more than that!
Typically, with increasing dimension comes increased ill conditioning,
and thus the use of preconditioning becomes essential.
PRIMME is a C library to find a number of eigenvalues and
their corresponding eigenvectors of a Real Symmetric, or Complex Hermitian
matrix A.
Preconditioning and finding largest, smallest or interior
eigenvalues is supported.
PRIMME is a multimethod eigensolver.
Based on Davidson/Jacobi-Davidson main iteration, it can transform to most
known preconditioned eigensolvers, by the appropriate choice of parameters.
Two of the choices, GD+1 and JDQMR, have proved nearly optimal eigensolvers
(see [1,2]). For user friendliness it provides the following predefined
choices of methods:
  DYNAMIC,
  DEFAULT_MIN_TIME,
  DEFAULT_MIN_MATVECS,
  Arnoldi,
  GD,
  GD_plusK,
  GD_Olsen_plusK,
  JD_Olsen_plusK,
  RQI,
  JDQR,
  JDQMR,
  JDQMR_ETol,
  SUBSPACE_ITERATION,
  LOBPCG_OrthoBasis,
  LOBPCG_OrthoBasis_Window
Under DYNAMIC method, the software alternates between DEFAULT_MIN_TIME
and DEFAULT_MIN_MATVECS to estimate the parameters of a cost model,
and identify the method that minimizes execution time for the given problem.
A multi-layer user interface allows efficient use by
non-expert end-users, and a powerful experimentation testbed for
eigenvalue research experts.
PRIMME is both parallel and sequential, based on an SMPD type
of parallelization.
PRIMME has many features such as blocking, locking,
locally optimal restarting, and a host of others that make it
extremely robust and efficient.
A full Fortran77 interface is provided.
The software has been tested extensively on a variety of architectures,
systems, and applications.
One known bug --discovered October 2009--.
In line 303 of ZSRC/inner_solve_z.c the following line:
{ztmp.r = -gamma; ztmp.i = 0.0L;}
should be
{ztmp.r = gamma; ztmp.i = 0.0L;}
This was impairing the performance of the Complex JDQMR method.
It will be fixed in a soon upcoming version.
Known omissions in the sample test programs that will be fixed
in the next version:
In the parallel test program driver_par.c the variable
(int procID) must be passed as a parameter into broadCast().
In the Makefile_par the linking line should include $(INCLUDE).
For any questions/reports/bugs send a message to
"andreas" at cs dot wm dot edu
The following papers describe the research that has led to this software.
To cite PRIMME, please cite paper [1]. More information
can be found in the rest of the papers.
The work has been supported by a number of grants from the
National Science Foundation.
Andreas Stathopoulos and James R. McCombs