1DSYTRF(1) LAPACK routine (version 3.1) DSYTRF(1)
2
3
4
6 DSYTRF - the factorization of a real symmetric matrix A using the
7 Bunch-Kaufman diagonal pivoting method
8
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
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
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
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)