ZLASYF - compute a partial factorization of a complex sym­
       metric matrix A using the Bunch-Kaufman diagonal  pivoting
       method


SYNOPSIS

       SUBROUTINE ZLASYF( UPLO,  N, NB, KB, A, LDA, IPIV, W, LDW,
                          INFO )

           CHARACTER      UPLO

           INTEGER        INFO, KB, LDA, LDW, N, NB

           INTEGER        IPIV( * )

           COMPLEX*16     A( LDA, * ), W( LDW, * )


PURPOSE

       ZLASYF computes a partial factorization of a complex  sym­
       metric  matrix A using the Bunch-Kaufman diagonal pivoting
       method. The partial factorization has the form:

       A  =  ( I  U12 ) ( A11  0  ) (  I    0   )  if UPLO = 'U',
       or:
             ( 0  U22 ) (  0   D  ) ( U12' U22' )

       A  =  ( L11  0 ) ( D    0  ) ( L11' L21' )  if UPLO = 'L'
             ( L21  I ) ( 0   A22 ) (  0    I   )

       where  the  order  of D is at most NB. The actual order is
       returned in the argument KB, and is either NB or NB-1,  or
       N if N <= NB.  Note that U' denotes the transpose of U.

       ZLASYF  is  an auxiliary routine called by ZSYTRF. It uses
       blocked code (calling Level 3 BLAS) to update  the  subma­
       trix A11 (if UPLO = 'U') or A22 (if UPLO = 'L').


ARGUMENTS

       UPLO    (input) CHARACTER*1
               Specifies  whether  the  upper or lower triangular
               part of the symmetric matrix A is stored:
               = 'U':  Upper triangular
               = 'L':  Lower triangular

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

       NB      (input) INTEGER
               The maximum number of columns of the matrix A that
               should  be  factored.   NB should be at least 2 to
               allow for 2-by-2 pivot blocks.

               The number of columns of A that were actually fac­
               tored.   KB is either NB-1 or NB, or N if N <= NB.

       A       (input/output) COMPLEX*16 array, dimension (LDA,N)
               On  entry, the symmetric matrix A.  If UPLO = 'U',
               the leading n-by-n upper triangular part of A con­
               tains  the  upper triangular part of the matrix A,
               and the strictly lower triangular part of A is not
               referenced.   If  UPLO  =  'L', the leading n-by-n
               lower triangular part of A contains the lower tri­
               angular  part  of  the  matrix A, and the strictly
               upper triangular part of A is not referenced.   On
               exit, A contains details of the partial factoriza­
               tion.

       LDA     (input) INTEGER
               The leading dimension of  the  array  A.   LDA  >=
               max(1,N).

       IPIV    (output) INTEGER array, dimension (N)
               Details  of  the interchanges and the block struc­
               ture of D.  If UPLO = 'U', only the last  KB  ele­
               ments  of  IPIV  are  set; if UPLO = 'L', only the
               first KB elements are set.

               If IPIV(k) >  0,  then  rows  and  columns  k  and
               IPIV(k)  were  interchanged and D(k,k) is a 1-by-1
               diagonal block.  If  UPLO  =  'U'  and  IPIV(k)  =
               IPIV(k-1)  <  0,  then  rows  and  columns k-1 and
               -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a
               2-by-2  diagonal block.  If UPLO = 'L' and IPIV(k)
               = IPIV(k+1) < 0, then rows  and  columns  k+1  and
               -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a
               2-by-2 diagonal block.

       W       (workspace) COMPLEX*16 array, dimension (LDW,NB)

       LDW     (input) INTEGER
               The leading dimension of  the  array  W.   LDW  >=
               max(1,N).

       INFO    (output) INTEGER
               = 0: successful exit
               >  0:  if  INFO  = k, D(k,k) is exactly zero.  The
               factorization has been completed,  but  the  block
               diagonal matrix D is exactly singular.


Man(1) output converted with man2html