TU Braunschweig FKT
TU Braunschweig Festkörper-Theorie
IThP home
People
Research
Reach us
Education
Service
Vacancies
A. Honecker
Software
Diagonalize
Modifications

Recent modifications:

  • Version released on April 27, 2005:
    • Lanczos can now compute more than one eigenvector.
      Note: There is still no check for ghosts, i.e. if you switch off reorthogonalization with the option -b, you are very likely to have spurious states - see this example for an illustration how this can be fixed.
    • Eigenvectors obtained by Lanczos' method can be dumped to disc with option -t. The format is the same as without Lanczos' prediagonalization.
    • Lanczos algorithm uses LaPack for diagonalization of the tridiagonal Lanczos' matrix if compiled with `-DLAPACK'.
    • Built-in routine for diagonalization of tridiagonal matrices slightly improved.
  • Version released on January 28, 2005:
    • Binding to GNU Readline Library added (allows editing of input).
    • Option -all added to suppress computation of eigenvectors when using LaPack or the internal Householder algorithm. With the option -all, all eigenvalues are computed to the best possible precision, but it is not checked what this really is. This option disables options affecting eigenvectors.
      This is useful if you want to perform a full diagonalization and do not need eigenvectors since it saves CPU time and memory in this case.
    • Option -m added to compute matrix elements of matrices other than the Hamiltonian in the eigenbasis and store them in the output file. This option comes in three variants:
      -ma computes all, -md the diagonal and -mu the upper (on and above the diagonal) matrix elements.
    • New option -zo generates a compressed output file. Although they can be used independently, this goes together with the previous option since output files containing matrix elements can become quite large.
  • Version released on December 2, 2004 (partial list):
    • Some optimization, amounting to substantial speedups in particular during complete diagonalization.
    • Optional binding to LaPack to replace built-in Householder routine (presently still a little faster than built-in Householder).
      To activate this, add `-DLAPACK' to the CFLAGS in the makefile as well as the appropriate Libraries for linking (LaPack, BLAS and a Fortran to C library).
    • Option -F added to skip diagonalization when reading eigenvectors from a file.
    • Buffers for output are kept open while program is running, but usually flushed after appending each line. output flushing can be switched off using `set outflush 0' (faster when large amounts of data are written).
    • Implemented basic complex operations using SSE2 instructions. However, this is not active since it does not pay off.
  • June 14, 2003:
    The recently introduced buffering of matrix evaluations while reading can be switched off using the argument -d.
    Reason: A speed-up is obtained only if the number of different entries in a matrix is small. If you have many different matrix elements, buffering in fact not only causes slowing down (rather than a speed-up), but the buffer space may be insufficient and the program will start to complain (although it will produce correct results). So, in order to process matrices with many different entries efficiently, you should use -d.
  • June 14, 2003:
    Further work on parallel support, in particular parallelized the Householder algorithm.
    Still needs to be merged with older parallelization efforts.

Some of the modifications between August 9, 2002 and June 7, 2003:

  • Explicit matrix diagonalization: Jacobi method replaced by Householder method (default - Jacobi method still available if the argument -j is used). During the (complete) diagonalization of big matrices (dimension a few thousand) this shortens the CPU time by up to more than one order of magnitude.
  • Solution of linear systems of equations for non-Hermitean matrices A using biconjugate gradient method added.
    See help on bcg_solve for more details.
  • Lanczos procedure supports one eigenvector - use with option -le instead of -l.
  • Options -f and -t allow specification of the name of the file for storing the eigenvectors.
  • Command `output':
    • Limitation to 3 expressions eliminated.
    • Allows setting precision using `set outdigits'.
    See help on output for more details.
  • `if a!=b' in addition to `if a=b' supported.
    See help on if for more details.
  • Some optimization in interpreter and internal matrix application(s) to save CPU time.
  • Some buffering added for faster reading of matrices.
  • Some parallel support (though still unfinished) added using the OpenMP library. Thanks to Josef Schüle for help.
    If you want to use the current version:
    • Merge the #pragma's and related items from the file vectors-par.c to vectors.c.
    • Add the necessary options (e.g. -omp in the CFLAGS) to the makefile.


Last updated: April 27, 2005; a.honecker[AT]tu-bs.de -- don't send me spam!