Contents


NAME

     zptsvx - use the factorization A = L*D*L**H to  compute  the
     solution  to  a  complex system of linear equations A*X = B,
     where A is an N-by-N Hermitian positive definite tridiagonal
     matrix and X and B are N-by-NRHS matrices

SYNOPSIS

     SUBROUTINE ZPTSVX(FACT, N, NRHS, DIAG, SUB, DIAGF, SUBF, B, LDB, X,
           LDX, RCOND, FERR, BERR, WORK, WORK2, INFO)

     CHARACTER * 1 FACT
     DOUBLE COMPLEX SUB(*), SUBF(*), B(LDB,*), X(LDX,*), WORK(*)
     INTEGER N, NRHS, LDB, LDX, INFO
     DOUBLE PRECISION RCOND
     DOUBLE  PRECISION  DIAG(*),  DIAGF(*),   FERR(*),   BERR(*),
     WORK2(*)

     SUBROUTINE ZPTSVX_64(FACT, N, NRHS, DIAG, SUB, DIAGF, SUBF, B, LDB,
           X, LDX, RCOND, FERR, BERR, WORK, WORK2, INFO)

     CHARACTER * 1 FACT
     DOUBLE COMPLEX SUB(*), SUBF(*), B(LDB,*), X(LDX,*), WORK(*)
     INTEGER*8 N, NRHS, LDB, LDX, INFO
     DOUBLE PRECISION RCOND
     DOUBLE  PRECISION  DIAG(*),  DIAGF(*),   FERR(*),   BERR(*),
     WORK2(*)

  F95 INTERFACE
     SUBROUTINE PTSVX(FACT, [N], [NRHS], DIAG, SUB, DIAGF, SUBF, B, [LDB],
            X, [LDX], RCOND, FERR, BERR, [WORK], [WORK2], [INFO])

     CHARACTER(LEN=1) :: FACT
     COMPLEX(8), DIMENSION(:) :: SUB, SUBF, WORK
     COMPLEX(8), DIMENSION(:,:) :: B, X
     INTEGER :: N, NRHS, LDB, LDX, INFO
     REAL(8) :: RCOND
     REAL(8), DIMENSION(:) :: DIAG, DIAGF, FERR, BERR, WORK2

     SUBROUTINE PTSVX_64(FACT, [N], [NRHS], DIAG, SUB, DIAGF, SUBF, B,
            [LDB], X, [LDX], RCOND, FERR, BERR, [WORK], [WORK2], [INFO])

     CHARACTER(LEN=1) :: FACT
     COMPLEX(8), DIMENSION(:) :: SUB, SUBF, WORK
     COMPLEX(8), DIMENSION(:,:) :: B, X
     INTEGER(8) :: N, NRHS, LDB, LDX, INFO
     REAL(8) :: RCOND
     REAL(8), DIMENSION(:) :: DIAG, DIAGF, FERR, BERR, WORK2
  C INTERFACE
     #include <sunperf.h>

     void zptsvx(char fact, int n, int nrhs, double *diag,  doub-
               lecomplex   *sub,   double  *diagf,  doublecomplex
               *subf, doublecomplex *b,  int  ldb,  doublecomplex
               *x,  int  ldx, double *rcond, double *ferr, double
               *berr, int *info);

     void zptsvx_64(char fact, long n, long nrhs,  double  *diag,
               doublecomplex  *sub,  double *diagf, doublecomplex
               *subf, doublecomplex *b, long  ldb,  doublecomplex
               *x,  long ldx, double *rcond, double *ferr, double
               *berr, long *info);

PURPOSE

     zptsvx uses the factorization A = L*D*L**H  to  compute  the
     solution  to  a  complex system of linear equations A*X = B,
     where A is an N-by-N Hermitian positive definite tridiagonal
     matrix and X and B are N-by-NRHS matrices.

     Error bounds on the solution and a  condition  estimate  are
     also provided.

     The following steps are performed:

     1. If FACT = 'N', the matrix A is factored as A =  L*D*L**H,
     where L
        is a unit lower bidiagonal matrix and D is diagonal.  The
        factorization can also be regarded as having the form
        A = U**H*D*U.

     2. If the leading i-by-i principal  minor  is  not  positive
     definite,
        then the routine returns with INFO =  i.  Otherwise,  the
     factored
        form of A is used to estimate the condition number of the
     matrix
        A.  If the reciprocal of the  condition  number  is  less
     than machine
        precision, INFO = N+1 is returned as a warning,  but  the
     routine
        still goes on to solve for X and compute error bounds as
        described below.

     3. The system of equations is solved for X  using  the  fac-
     tored form
        of A.

     4. Iterative refinement is applied to improve  the  computed
     solution
        matrix and calculate  error  bounds  and  backward  error
     estimates
        for it.

ARGUMENTS

     FACT (input)
               Specifies whether or not the factored form of  the
               matrix  A is supplied on entry.  = 'F':  On entry,
               DIAGF and SUBF contain the  factored  form  of  A.
               DIAG,  SUB,  DIAGF, and SUBF will not be modified.
               = 'N':  The matrix A will be copied to  DIAGF  and
               SUBF and factored.

     N (input) The order of the matrix A.  N >= 0.

     NRHS (input)
               The number of right hand sides, i.e.,  the  number
               of columns of the matrices B and X.  NRHS >= 0.

     DIAG (input)
               The n diagonal elements of the tridiagonal  matrix
               A.

     SUB (input)
               The (n-1) subdiagonal elements of the  tridiagonal
               matrix A.

     DIAGF (input/output)
               If FACT = 'F', then DIAGF is an input argument and
               on  entry  contains the n diagonal elements of the
               diagonal matrix DIAG from the L*DIAG*L**H factori-
               zation of A.  If FACT = 'N', then DIAGF is an out-
               put argument and on exit contains the  n  diagonal
               elements  of  the  diagonal  matrix  DIAG from the
               L*DIAG*L**H factorization of A.

     SUBF (input/output)
               If FACT = 'F', then SUBF is an input argument  and
               on  entry  contains the (n-1) subdiagonal elements
               of  the  unit  bidiagonal  factor   L   from   the
               L*DIAG*L**H  factorization  of  A.  If FACT = 'N',
               then SUBF is an output argument and on  exit  con-
               tains  the  (n-1) subdiagonal elements of the unit
               bidiagonal   factor   L   from   the   L*DIAG*L**H
               factorization of A.

     B (input) On entry, the N-by-NRHS right hand side matrix  B.
               Unchanged on exit.

     LDB (input)
               The leading dimension of  the  array  B.   LDB  >=
               max(1,N).

     X (output)
               If INFO = 0 or INFO = N+1, the N-by-NRHS  solution
               matrix X.

     LDX (input)
               The leading dimension of  the  array  X.   LDX  >=
               max(1,N).

     RCOND (output)
               The reciprocal condition number of the  matrix  A.
               If  RCOND  is  less than the machine precision (in
               particular, if RCOND = 0), the matrix is  singular
               to working precision.  This condition is indicated
               by a return code of INFO > 0.

     FERR (output)
               The forward error bound for each  solution  vector
               X(j)  (the  j-th column of the solution matrix X).
               If XTRUE is the  true  solution  corresponding  to
               X(j),  FERR(j) is an estimated upper bound for the
               magnitude of the largest element in (X(j) - XTRUE)
               divided by the magnitude of the largest element in
               X(j).

     BERR (output)
               The componentwise relative backward error of  each
               solution  vector X(j) (i.e., the smallest relative
               change in any element of A or B that makes X(j) an
               exact solution).

     WORK (workspace)
               dimension(N)

     WORK2 (workspace)
               dimension(N)
     INFO (output)
               = 0:  successful exit
               < 0:  if INFO = -i, the i-th argument had an ille-
               gal value
               > 0:  if INFO = i, and i is
               <= N:  the leading minor of order i of  A  is  not
               positive  definite, so the factorization could not
               be completed, and the solution has not  been  com-
               puted.  RCOND  =  0 is returned.  = N+1: U is non-
               singular, but RCOND is less  than  machine  preci-
               sion, meaning that the matrix is singular to work-
               ing precision.   Nevertheless,  the  solution  and
               error  bounds  are  computed  because  there are a
               number of situations where the  computed  solution
               can be more accurate than the value of RCOND would
               suggest.