NAME

cstegr - Compute T-sigma_i = L_i D_i L_i^T, such that L_i D_i L_i^T is a relatively robust representation


SYNOPSIS

  SUBROUTINE CSTEGR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL, M, 
 *      W, Z, LDZ, ISUPPZ, WORK, LWORK, IWORK, LIWORK, INFO)
  CHARACTER * 1 JOBZ, RANGE
  COMPLEX Z(LDZ,*)
  INTEGER N, IL, IU, M, LDZ, LWORK, LIWORK, INFO
  INTEGER ISUPPZ(*), IWORK(*)
  REAL VL, VU, ABSTOL
  REAL D(*), E(*), W(*), WORK(*)
  SUBROUTINE CSTEGR_64( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL, 
 *      M, W, Z, LDZ, ISUPPZ, WORK, LWORK, IWORK, LIWORK, INFO)
  CHARACTER * 1 JOBZ, RANGE
  COMPLEX Z(LDZ,*)
  INTEGER*8 N, IL, IU, M, LDZ, LWORK, LIWORK, INFO
  INTEGER*8 ISUPPZ(*), IWORK(*)
  REAL VL, VU, ABSTOL
  REAL D(*), E(*), W(*), WORK(*)

F95 INTERFACE

  SUBROUTINE STEGR( JOBZ, RANGE, [N], D, E, VL, VU, IL, IU, ABSTOL, M, 
 *       W, Z, [LDZ], ISUPPZ, [WORK], [LWORK], [IWORK], [LIWORK], [INFO])
  CHARACTER(LEN=1) :: JOBZ, RANGE
  COMPLEX, DIMENSION(:,:) :: Z
  INTEGER :: N, IL, IU, M, LDZ, LWORK, LIWORK, INFO
  INTEGER, DIMENSION(:) :: ISUPPZ, IWORK
  REAL :: VL, VU, ABSTOL
  REAL, DIMENSION(:) :: D, E, W, WORK
  SUBROUTINE STEGR_64( JOBZ, RANGE, [N], D, E, VL, VU, IL, IU, ABSTOL, 
 *       M, W, Z, [LDZ], ISUPPZ, [WORK], [LWORK], [IWORK], [LIWORK], [INFO])
  CHARACTER(LEN=1) :: JOBZ, RANGE
  COMPLEX, DIMENSION(:,:) :: Z
  INTEGER(8) :: N, IL, IU, M, LDZ, LWORK, LIWORK, INFO
  INTEGER(8), DIMENSION(:) :: ISUPPZ, IWORK
  REAL :: VL, VU, ABSTOL
  REAL, DIMENSION(:) :: D, E, W, WORK

C INTERFACE

#include <sunperf.h>

void cstegr(char jobz, char range, int n, float *d, float *e, float vl, float vu, int il, int iu, float abstol, int *m, float *w, complex *z, int ldz, int *isuppz, int *info);

void cstegr_64(char jobz, char range, long n, float *d, float *e, float vl, float vu, long il, long iu, float abstol, long *m, float *w, complex *z, long ldz, long *isuppz, long *info);


PURPOSE

cstegr b) Compute the eigenvalues, lambda_j, of L_i D_i L_i^T to high relative accuracy by the dqds algorithm,

   (c) If there is a cluster of close eigenvalues, "choose" sigma_i
       close to the cluster, and go to step (a),
   (d) Given the approximate eigenvalue lambda_j of L_i D_i L_i^T,
       compute the corresponding eigenvector by forming a
       rank-revealing twisted factorization.

The desired accuracy of the output can be specified by the input parameter ABSTOL.

For more details, see ``A new O(n^2) algorithm for the symmetric tridiagonal eigenvalue/eigenvector problem'', by Inderjit Dhillon, Computer Science Division Technical Report No. UCB/CSD-97-971, UC Berkeley, May 1997.

Note 1 : Currently CSTEGR is only set up to find ALL the n eigenvalues and eigenvectors of T in O(n^2) time

Note 2 : Currently the routine CSTEIN is called when an appropriate sigma_i cannot be chosen in step (c) above. CSTEIN invokes modified Gram-Schmidt when eigenvalues are close.

Note 3 : CSTEGR works only on machines which follow ieee-754 floating-point standard in their handling of infinities and NaNs. Normal execution of CSTEGR may create NaNs and infinities and hence may abort due to a floating point exception in environments which do not conform to the ieee standard.


ARGUMENTS


FURTHER DETAILS

Based on contributions by

   Inderjit Dhillon, IBM Almaden, USA
   Osni Marques, LBNL/NERSC, USA
   Ken Stanley, Computer Science Division, University of California at Berkeley, USA