ZLAHEF(3)                  MathKeisan LAPACK routine                 ZLAHEF(3)



NAME
       ZLAHEF  - a partial factorization of a complex Hermitian matrix A using
       the Bunch-Kaufman diagonal pivoting method

SYNOPSIS
       SUBROUTINE ZLAHEF( 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
       ZLAHEF computes a partial factorization of a complex Hermitian matrix A
       using  the  Bunch-Kaufman diagonal pivoting method. The partial factor-
       ization 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 conjugate transpose of U.

       ZLAHEF is an auxiliary routine called by ZHETRF. It uses  blocked  code
       (calling  Level  3 BLAS) to update the submatrix A11 (if UPLO = 'U') or
       A22 (if UPLO = 'L').


ARGUMENTS
       UPLO    (input) CHARACTER*1
               Specifies whether the upper or lower  triangular  part  of  the
               Hermitian 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.

       KB      (output) INTEGER
               The  number of columns of A that were actually factored.  KB is
               either NB-1 or NB, or N if N <= NB.

       A       (input/output) COMPLEX*16 array, dimension (LDA,N)
               On entry, the Hermitian matrix A.  If UPLO = 'U',  the  leading
               n-by-n upper triangular part of A contains 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 triangular part of  the
               matrix  A,  and  the strictly upper triangular part of A is not
               referenced.   On  exit,  A  contains  details  of  the  partial
               factorization.

       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 structure of D.  If
               UPLO = 'U', only the last KB elements 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 inter-
               changed 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 diag-
               onal  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.



 LAPACK routine (version 3.1)    November 2006                       ZLAHEF(3)