SLASYF - compute a partial factorization of a real symmet­
       ric matrix A using  the  Bunch-Kaufman  diagonal  pivoting
       method


SYNOPSIS

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

           CHARACTER      UPLO

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

           INTEGER        IPIV( * )

           REAL           A( LDA, * ), W( LDW, * )


PURPOSE

       SLASYF computes a partial factorization of a real  symmet­
       ric  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.

       SLASYF  is  an auxiliary routine called by SSYTRF. 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) REAL 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) REAL 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