SSYTRF(l)		LAPACK routine (version	1.1)		    SSYTRF(l)

NAME
  SSYTRF - compute the factorization of	a real symmetric matrix	A using	the
  Bunch-Kaufman	diagonal pivoting method

SYNOPSIS

  SUBROUTINE SSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )

      CHARACTER	     UPLO

      INTEGER	     INFO, LDA,	LWORK, N

      INTEGER	     IPIV( * )

      REAL	     A(	LDA, * ), WORK(	LWORK )

PURPOSE
  SSYTRF computes the factorization of a real symmetric	matrix A using the
  Bunch-Kaufman	diagonal pivoting method.  The form of the factorization is

     A = U*D*U**T  or  A = L*D*L**T

  where	U (or L) is a product of permutation and unit upper (lower) triangu-
  lar matrices,	and D is symmetric and block diagonal with 1-by-1 and 2-by-2
  diagonal blocks.

  This is the blocked version of the algorithm,	calling	Level 3	BLAS.

ARGUMENTS

  UPLO	  (input) CHARACTER*1
	  = 'U':  Upper	triangle of A is stored;
	  = 'L':  Lower	triangle of A is stored.

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

  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 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, the block diagonal matrix D and the multipliers used	to
	  obtain the factor U or L (see	below for further details).

  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
	  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 inter-
	  changed 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.

  WORK	  (workspace) REAL array, dimension (LWORK)
	  On exit, if INFO = 0,	WORK(1)	returns	the optimal LWORK.

  LWORK	  (input) INTEGER
	  The length of	WORK.  LWORK >=1.  For best performance	LWORK >=
	  N*NB,	where NB is the	block size returned by ILAENV.

  INFO	  (output) INTEGER
	  = 0:	successful exit
	  < 0:	if INFO	= -i, the i-th argument	had an illegal value
	  > 0:	if INFO	= i, D(i,i) is exactly zero.  The factorization	has
	  been completed, but the block	diagonal matrix	D is exactly singu-
	  lar, and division by zero will occur if it is	used to	solve a	sys-
	  tem of equations.

FURTHER	DETAILS
  If UPLO = 'U', then A	= U*D*U', where
     U = P(n)*U(n)* ...	*P(k)U(k)* ...,
  i.e.,	U is a product of terms	P(k)*U(k), where k decreases from n to 1 in
  steps	of 1 or	2, and D is a block diagonal matrix with 1-by-1	and 2-by-2
  diagonal blocks D(k).	 P(k) is a permutation matrix as defined by IPIV(k),
  and U(k) is a	unit upper triangular matrix, such that	if the diagonal	block
  D(k) is of order s (s	= 1 or 2), then

	     (	 I    v	   0   )   k-s
     U(k) =  (	 0    I	   0   )   s
	     (	 0    0	   I   )   n-k
		k-s   s	  n-k

  If s = 1, D(k) overwrites A(k,k), and	v overwrites A(1:k-1,k).  If s = 2,
  the upper triangle of	D(k) overwrites	A(k-1,k-1), A(k-1,k), and A(k,k), and
  v overwrites A(1:k-2,k-1:k).

  If UPLO = 'L', then A	= L*D*L', where
     L = P(1)*L(1)* ...	*P(k)*L(k)* ...,
  i.e.,	L is a product of terms	P(k)*L(k), where k increases from 1 to n in
  steps	of 1 or	2, and D is a block diagonal matrix with 1-by-1	and 2-by-2
  diagonal blocks D(k).	 P(k) is a permutation matrix as defined by IPIV(k),
  and L(k) is a	unit lower triangular matrix, such that	if the diagonal	block
  D(k) is of order s (s	= 1 or 2), then

	     (	 I    0	    0	)  k-1
     L(k) =  (	 0    I	    0	)  s
	     (	 0    v	    I	)  n-k-s+1
		k-1   s	 n-k-s+1

  If s = 1, D(k) overwrites A(k,k), and	v overwrites A(k+1:n,k).  If s = 2,
  the lower triangle of	D(k) overwrites	A(k,k),	A(k+1,k), and A(k+1,k+1), and
  v overwrites A(k+2:n,k:k+1).


Back to the listing of computational routines for linear equations