1
*> \brief \b ZLATRD reduces the first nb rows and columns of a symmetric/Hermitian matrix A to real tridiagonal form by an unitary similarity transformation.
3
* =========== DOCUMENTATION ===========
5
* Online html documentation available at
6
* http://www.netlib.org/lapack/explore-html/
9
*> Download ZLATRD + dependencies
10
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlatrd.f">
12
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlatrd.f">
14
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatrd.f">
21
* SUBROUTINE ZLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
23
* .. Scalar Arguments ..
25
* INTEGER LDA, LDW, N, NB
27
* .. Array Arguments ..
28
* DOUBLE PRECISION E( * )
29
* COMPLEX*16 A( LDA, * ), TAU( * ), W( LDW, * )
38
*> ZLATRD reduces NB rows and columns of a complex Hermitian matrix A to
39
*> Hermitian tridiagonal form by a unitary similarity
40
*> transformation Q**H * A * Q, and returns the matrices V and W which are
41
*> needed to apply the transformation to the unreduced part of A.
43
*> If UPLO = 'U', ZLATRD reduces the last NB rows and columns of a
44
*> matrix, of which the upper triangle is supplied;
45
*> if UPLO = 'L', ZLATRD reduces the first NB rows and columns of a
46
*> matrix, of which the lower triangle is supplied.
48
*> This is an auxiliary routine called by ZHETRD.
56
*> UPLO is CHARACTER*1
57
*> Specifies whether the upper or lower triangular part of the
58
*> Hermitian matrix A is stored:
59
*> = 'U': Upper triangular
60
*> = 'L': Lower triangular
66
*> The order of the matrix A.
72
*> The number of rows and columns to be reduced.
77
*> A is COMPLEX*16 array, dimension (LDA,N)
78
*> On entry, the Hermitian matrix A. If UPLO = 'U', the leading
79
*> n-by-n upper triangular part of A contains the upper
80
*> triangular part of the matrix A, and the strictly lower
81
*> triangular part of A is not referenced. If UPLO = 'L', the
82
*> leading n-by-n lower triangular part of A contains the lower
83
*> triangular part of the matrix A, and the strictly upper
84
*> triangular part of A is not referenced.
86
*> if UPLO = 'U', the last NB columns have been reduced to
87
*> tridiagonal form, with the diagonal elements overwriting
88
*> the diagonal elements of A; the elements above the diagonal
89
*> with the array TAU, represent the unitary matrix Q as a
90
*> product of elementary reflectors;
91
*> if UPLO = 'L', the first NB columns have been reduced to
92
*> tridiagonal form, with the diagonal elements overwriting
93
*> the diagonal elements of A; the elements below the diagonal
94
*> with the array TAU, represent the unitary matrix Q as a
95
*> product of elementary reflectors.
96
*> See Further Details.
102
*> The leading dimension of the array A. LDA >= max(1,N).
107
*> E is DOUBLE PRECISION array, dimension (N-1)
108
*> If UPLO = 'U', E(n-nb:n-1) contains the superdiagonal
109
*> elements of the last NB columns of the reduced matrix;
110
*> if UPLO = 'L', E(1:nb) contains the subdiagonal elements of
111
*> the first NB columns of the reduced matrix.
116
*> TAU is COMPLEX*16 array, dimension (N-1)
117
*> The scalar factors of the elementary reflectors, stored in
118
*> TAU(n-nb:n-1) if UPLO = 'U', and in TAU(1:nb) if UPLO = 'L'.
119
*> See Further Details.
124
*> W is COMPLEX*16 array, dimension (LDW,NB)
125
*> The n-by-nb matrix W required to update the unreduced part
132
*> The leading dimension of the array W. LDW >= max(1,N).
138
*> \author Univ. of Tennessee
139
*> \author Univ. of California Berkeley
140
*> \author Univ. of Colorado Denver
143
*> \date September 2012
145
*> \ingroup complex16OTHERauxiliary
147
*> \par Further Details:
148
* =====================
152
*> If UPLO = 'U', the matrix Q is represented as a product of elementary
155
*> Q = H(n) H(n-1) . . . H(n-nb+1).
157
*> Each H(i) has the form
159
*> H(i) = I - tau * v * v**H
161
*> where tau is a complex scalar, and v is a complex vector with
162
*> v(i:n) = 0 and v(i-1) = 1; v(1:i-1) is stored on exit in A(1:i-1,i),
163
*> and tau in TAU(i-1).
165
*> If UPLO = 'L', the matrix Q is represented as a product of elementary
168
*> Q = H(1) H(2) . . . H(nb).
170
*> Each H(i) has the form
172
*> H(i) = I - tau * v * v**H
174
*> where tau is a complex scalar, and v is a complex vector with
175
*> v(1:i) = 0 and v(i+1) = 1; v(i+1:n) is stored on exit in A(i+1:n,i),
176
*> and tau in TAU(i).
178
*> The elements of the vectors v together form the n-by-nb matrix V
179
*> which is needed, with W, to apply the transformation to the unreduced
180
*> part of the matrix, using a Hermitian rank-2k update of the form:
181
*> A := A - V*W**H - W*V**H.
183
*> The contents of A on exit are illustrated by the following examples
184
*> with n = 5 and nb = 2:
186
*> if UPLO = 'U': if UPLO = 'L':
188
*> ( a a a v4 v5 ) ( d )
189
*> ( a a v4 v5 ) ( 1 d )
190
*> ( a 1 v5 ) ( v1 1 a )
191
*> ( d 1 ) ( v1 v2 a a )
192
*> ( d ) ( v1 v2 a a a )
194
*> where d denotes a diagonal element of the reduced matrix, a denotes
195
*> an element of the original matrix that is unchanged, and vi denotes
196
*> an element of the vector defining H(i).
199
* =====================================================================
1
200
SUBROUTINE ZLATRD( UPLO, N, NB, A, LDA, E, TAU, W, LDW )
3
* -- LAPACK auxiliary routine (version 2.0) --
4
* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
5
* Courant Institute, Argonne National Lab, and Rice University
202
* -- LAPACK auxiliary routine (version 3.4.2) --
203
* -- LAPACK is a software package provided by Univ. of Tennessee, --
204
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
8
207
* .. Scalar Arguments ..
14
213
COMPLEX*16 A( LDA, * ), TAU( * ), W( LDW, * )
18
* $Id: zlatrd.f 19697 2010-10-29 16:57:34Z d3y133 $
23
* ZLATRD reduces NB rows and columns of a complex Hermitian matrix A to
24
* Hermitian tridiagonal form by a unitary similarity
25
* transformation Q' * A * Q, and returns the matrices V and W which are
26
* needed to apply the transformation to the unreduced part of A.
28
* If UPLO = 'U', ZLATRD reduces the last NB rows and columns of a
29
* matrix, of which the upper triangle is supplied;
30
* if UPLO = 'L', ZLATRD reduces the first NB rows and columns of a
31
* matrix, of which the lower triangle is supplied.
33
* This is an auxiliary routine called by ZHETRD.
38
* UPLO (input) CHARACTER
39
* Specifies whether the upper or lower triangular part of the
40
* Hermitian matrix A is stored:
41
* = 'U': Upper triangular
42
* = 'L': Lower triangular
45
* The order of the matrix A.
48
* The number of rows and columns to be reduced.
50
* A (input/output) COMPLEX*16 array, dimension (LDA,N)
51
* On entry, the Hermitian matrix A. If UPLO = 'U', the leading
52
* n-by-n upper triangular part of A contains the upper
53
* triangular part of the matrix A, and the strictly lower
54
* triangular part of A is not referenced. If UPLO = 'L', the
55
* leading n-by-n lower triangular part of A contains the lower
56
* triangular part of the matrix A, and the strictly upper
57
* triangular part of A is not referenced.
59
* if UPLO = 'U', the last NB columns have been reduced to
60
* tridiagonal form, with the diagonal elements overwriting
61
* the diagonal elements of A; the elements above the diagonal
62
* with the array TAU, represent the unitary matrix Q as a
63
* product of elementary reflectors;
64
* if UPLO = 'L', the first NB columns have been reduced to
65
* tridiagonal form, with the diagonal elements overwriting
66
* the diagonal elements of A; the elements below the diagonal
67
* with the array TAU, represent the unitary matrix Q as a
68
* product of elementary reflectors.
69
* See Further Details.
72
* The leading dimension of the array A. LDA >= max(1,N).
74
* E (output) DOUBLE PRECISION array, dimension (N-1)
75
* If UPLO = 'U', E(n-nb:n-1) contains the superdiagonal
76
* elements of the last NB columns of the reduced matrix;
77
* if UPLO = 'L', E(1:nb) contains the subdiagonal elements of
78
* the first NB columns of the reduced matrix.
80
* TAU (output) COMPLEX*16 array, dimension (N-1)
81
* The scalar factors of the elementary reflectors, stored in
82
* TAU(n-nb:n-1) if UPLO = 'U', and in TAU(1:nb) if UPLO = 'L'.
83
* See Further Details.
85
* W (output) COMPLEX*16 array, dimension (LDW,NB)
86
* The n-by-nb matrix W required to update the unreduced part
90
* The leading dimension of the array W. LDW >= max(1,N).
95
* If UPLO = 'U', the matrix Q is represented as a product of elementary
98
* Q = H(n) H(n-1) . . . H(n-nb+1).
100
* Each H(i) has the form
102
* H(i) = I - tau * v * v'
104
* where tau is a complex scalar, and v is a complex vector with
105
* v(i:n) = 0 and v(i-1) = 1; v(1:i-1) is stored on exit in A(1:i-1,i),
106
* and tau in TAU(i-1).
108
* If UPLO = 'L', the matrix Q is represented as a product of elementary
111
* Q = H(1) H(2) . . . H(nb).
113
* Each H(i) has the form
115
* H(i) = I - tau * v * v'
117
* where tau is a complex scalar, and v is a complex vector with
118
* v(1:i) = 0 and v(i+1) = 1; v(i+1:n) is stored on exit in A(i+1:n,i),
121
* The elements of the vectors v together form the n-by-nb matrix V
122
* which is needed, with W, to apply the transformation to the unreduced
123
* part of the matrix, using a Hermitian rank-2k update of the form:
124
* A := A - V*W' - W*V'.
126
* The contents of A on exit are illustrated by the following examples
127
* with n = 5 and nb = 2:
129
* if UPLO = 'U': if UPLO = 'L':
131
* ( a a a v4 v5 ) ( d )
132
* ( a a v4 v5 ) ( 1 d )
133
* ( a 1 v5 ) ( v1 1 a )
134
* ( d 1 ) ( v1 v2 a a )
135
* ( d ) ( v1 v2 a a a )
137
* where d denotes a diagonal element of the reduced matrix, a denotes
138
* an element of the original matrix that is unchanged, and vi denotes
139
* an element of the vector defining H(i).
141
216
* =====================================================================
143
218
* .. Parameters ..