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

NAME

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

SYNOPSIS

10       SUBROUTINE ZSYTRF( 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           COMPLEX*16     A( LDA, * ), WORK( * )
19

PURPOSE

21       ZSYTRF computes the factorization of a complex 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 with
29       1-by-1 and 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) COMPLEX*16 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) COMPLEX*16 array, dimension (MAX(1,LWORK))
68               On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
69
70       LWORK   (input) INTEGER
71               The length of WORK.  LWORK >=1.  For best performance LWORK  >=
72               N*NB, where NB is the block size returned by ILAENV.
73
74               If  LWORK  = -1, then a workspace query is assumed; the routine
75               only calculates the optimal size of  the  WORK  array,  returns
76               this  value  as the first entry of the WORK array, and no error
77               message related to LWORK is issued by XERBLA.
78
79       INFO    (output) INTEGER
80               = 0:  successful exit
81               < 0:  if INFO = -i, the i-th argument had an illegal value
82               > 0:  if INFO = i, D(i,i) is exactly zero.   The  factorization
83               has  been completed, but the block diagonal matrix D is exactly
84               singular, and division by zero will occur  if  it  is  used  to
85               solve a system of equations.
86

FURTHER DETAILS

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