1DSYTRF(1)                LAPACK routine (version 3.1)                DSYTRF(1)
2
3
4

NAME

6       DSYTRF  -  the  factorization  of  a  real symmetric matrix A using the
7       Bunch-Kaufman diagonal pivoting method
8

SYNOPSIS

10       SUBROUTINE DSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
11
12           CHARACTER      UPLO
13
14           INTEGER        INFO, LDA, LWORK, N
15
16           INTEGER        IPIV( * )
17
18           DOUBLE         PRECISION A( LDA, * ), WORK( * )
19

PURPOSE

21       DSYTRF computes the factorization of a real symmetric  matrix  A  using
22       the Bunch-Kaufman diagonal pivoting method.  The form of the factoriza‐
23       tion is
24
25          A = U*D*U**T  or  A = L*D*L**T
26
27       where U (or L) is a product of permutation and unit upper (lower)  tri‐
28       angular matrices, and D is symmetric and block diagonal with 1-by-1 and
29       2-by-2 diagonal blocks.
30
31       This is the blocked version of the algorithm, calling Level 3 BLAS.
32
33

ARGUMENTS

35       UPLO    (input) CHARACTER*1
36               = 'U':  Upper triangle of A is stored;
37               = 'L':  Lower triangle of A is stored.
38
39       N       (input) INTEGER
40               The order of the matrix A.  N >= 0.
41
42       A       (input/output) DOUBLE PRECISION array, dimension (LDA,N)
43               On entry, the symmetric matrix A.  If UPLO = 'U',  the  leading
44               N-by-N upper triangular part of A contains the upper triangular
45               part of the matrix A, and the strictly lower triangular part of
46               A  is  not referenced.  If UPLO = 'L', the leading N-by-N lower
47               triangular part of A contains the lower triangular part of  the
48               matrix  A,  and  the strictly upper triangular part of A is not
49               referenced.
50
51               On exit, the block diagonal matrix D and the  multipliers  used
52               to obtain the factor U or L (see below for further details).
53
54       LDA     (input) INTEGER
55               The leading dimension of the array A.  LDA >= max(1,N).
56
57       IPIV    (output) INTEGER array, dimension (N)
58               Details  of  the interchanges and the block structure of D.  If
59               IPIV(k) > 0, then rows and columns k and  IPIV(k)  were  inter‐
60               changed  and  D(k,k) is a 1-by-1 diagonal block.  If UPLO = 'U'
61               and IPIV(k) = IPIV(k-1) < 0, then  rows  and  columns  k-1  and
62               -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diag‐
63               onal block.  If UPLO = 'L' and IPIV(k) = IPIV(k+1)  <  0,  then
64               rows  and  columns  k+1  and  -IPIV(k)  were  interchanged  and
65               D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
66
67       WORK      (workspace/output)   DOUBLE   PRECISION   array,    dimension
68       (MAX(1,LWORK))
69               On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
70
71       LWORK   (input) INTEGER
72               The  length of WORK.  LWORK >=1.  For best performance LWORK >=
73               N*NB, where NB is the block size returned by ILAENV.
74
75               If LWORK = -1, then a workspace query is assumed;  the  routine
76               only  calculates  the  optimal  size of the WORK array, returns
77               this value as the first entry of the WORK array, and  no  error
78               message related to LWORK is issued by XERBLA.
79
80       INFO    (output) INTEGER
81               = 0:  successful exit
82               < 0:  if INFO = -i, the i-th argument had an illegal value
83               >  0:   if INFO = i, D(i,i) is exactly zero.  The factorization
84               has been completed, but the block diagonal matrix D is  exactly
85               singular,  and  division  by  zero  will occur if it is used to
86               solve a system of equations.
87

FURTHER DETAILS

89       If UPLO = 'U', then A = U*D*U', where
90          U = P(n)*U(n)* ... *P(k)U(k)* ...,
91       i.e., U is a product of terms P(k)*U(k), where k decreases from n to  1
92       in  steps  of  1 or 2, and D is a block diagonal matrix with 1-by-1 and
93       2-by-2 diagonal blocks D(k).  P(k) is a permutation matrix  as  defined
94       by  IPIV(k),  and  U(k) is a unit upper triangular matrix, such that if
95       the diagonal block D(k) is of order s (s = 1 or 2), then
96
97                  (   I    v    0   )   k-s
98          U(k) =  (   0    I    0   )   s
99                  (   0    0    I   )   n-k
100                     k-s   s   n-k
101
102       If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k).  If s  =
103       2,  the  upper  triangle  of  D(k) overwrites A(k-1,k-1), A(k-1,k), and
104       A(k,k), and v overwrites A(1:k-2,k-1:k).
105
106       If UPLO = 'L', then A = L*D*L', where
107          L = P(1)*L(1)* ... *P(k)*L(k)* ...,
108       i.e., L is a product of terms P(k)*L(k), where k increases from 1 to  n
109       in  steps  of  1 or 2, and D is a block diagonal matrix with 1-by-1 and
110       2-by-2 diagonal blocks D(k).  P(k) is a permutation matrix  as  defined
111       by  IPIV(k),  and  L(k) is a unit lower triangular matrix, such that if
112       the diagonal block D(k) is of order s (s = 1 or 2), then
113
114                  (   I    0     0   )  k-1
115          L(k) =  (   0    I     0   )  s
116                  (   0    v     I   )  n-k-s+1
117                     k-1   s  n-k-s+1
118
119       If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k).  If s  =
120       2,  the  lower  triangle  of  D(k)  overwrites  A(k,k),  A(k+1,k),  and
121       A(k+1,k+1), and v overwrites A(k+2:n,k:k+1).
122
123
124
125
126 LAPACK routine (version 3.1)    November 2006                       DSYTRF(1)
Impressum