LAPACK  3.4.2
LAPACK: Linear Algebra PACKage
 All Files Functions Groups
zlarfy.f
Go to the documentation of this file.
1 *> \brief \b ZLARFY
2 *
3 * =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
7 *
8 * Definition:
9 * ===========
10 *
11 * SUBROUTINE ZLARFY( UPLO, N, V, INCV, TAU, C, LDC, WORK )
12 *
13 * .. Scalar Arguments ..
14 * CHARACTER UPLO
15 * INTEGER INCV, LDC, N
16 * COMPLEX*16 TAU
17 * ..
18 * .. Array Arguments ..
19 * COMPLEX*16 C( LDC, * ), V( * ), WORK( * )
20 * ..
21 *
22 *
23 *> \par Purpose:
24 * =============
25 *>
26 *> \verbatim
27 *>
28 *> ZLARFY applies an elementary reflector, or Householder matrix, H,
29 *> to an n x n Hermitian matrix C, from both the left and the right.
30 *>
31 *> H is represented in the form
32 *>
33 *> H = I - tau * v * v'
34 *>
35 *> where tau is a scalar and v is a vector.
36 *>
37 *> If tau is zero, then H is taken to be the unit matrix.
38 *> \endverbatim
39 *
40 * Arguments:
41 * ==========
42 *
43 *> \param[in] UPLO
44 *> \verbatim
45 *> UPLO is CHARACTER*1
46 *> Specifies whether the upper or lower triangular part of the
47 *> Hermitian matrix C is stored.
48 *> = 'U': Upper triangle
49 *> = 'L': Lower triangle
50 *> \endverbatim
51 *>
52 *> \param[in] N
53 *> \verbatim
54 *> N is INTEGER
55 *> The number of rows and columns of the matrix C. N >= 0.
56 *> \endverbatim
57 *>
58 *> \param[in] V
59 *> \verbatim
60 *> V is COMPLEX*16 array, dimension
61 *> (1 + (N-1)*abs(INCV))
62 *> The vector v as described above.
63 *> \endverbatim
64 *>
65 *> \param[in] INCV
66 *> \verbatim
67 *> INCV is INTEGER
68 *> The increment between successive elements of v. INCV must
69 *> not be zero.
70 *> \endverbatim
71 *>
72 *> \param[in] TAU
73 *> \verbatim
74 *> TAU is COMPLEX*16
75 *> The value tau as described above.
76 *> \endverbatim
77 *>
78 *> \param[in,out] C
79 *> \verbatim
80 *> C is COMPLEX*16 array, dimension (LDC, N)
81 *> On entry, the matrix C.
82 *> On exit, C is overwritten by H * C * H'.
83 *> \endverbatim
84 *>
85 *> \param[in] LDC
86 *> \verbatim
87 *> LDC is INTEGER
88 *> The leading dimension of the array C. LDC >= max( 1, N ).
89 *> \endverbatim
90 *>
91 *> \param[out] WORK
92 *> \verbatim
93 *> WORK is COMPLEX*16 array, dimension (N)
94 *> \endverbatim
95 *
96 * Authors:
97 * ========
98 *
99 *> \author Univ. of Tennessee
100 *> \author Univ. of California Berkeley
101 *> \author Univ. of Colorado Denver
102 *> \author NAG Ltd.
103 *
104 *> \date November 2011
105 *
106 *> \ingroup complex16_eig
107 *
108 * =====================================================================
109  SUBROUTINE zlarfy( UPLO, N, V, INCV, TAU, C, LDC, WORK )
110 *
111 * -- LAPACK test routine (version 3.4.0) --
112 * -- LAPACK is a software package provided by Univ. of Tennessee, --
113 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
114 * November 2011
115 *
116 * .. Scalar Arguments ..
117  CHARACTER uplo
118  INTEGER incv, ldc, n
119  COMPLEX*16 tau
120 * ..
121 * .. Array Arguments ..
122  COMPLEX*16 c( ldc, * ), v( * ), work( * )
123 * ..
124 *
125 * =====================================================================
126 *
127 * .. Parameters ..
128  COMPLEX*16 one, zero, half
129  parameter( one = ( 1.0d+0, 0.0d+0 ),
130  $ zero = ( 0.0d+0, 0.0d+0 ),
131  $ half = ( 0.5d+0, 0.0d+0 ) )
132 * ..
133 * .. Local Scalars ..
134  COMPLEX*16 alpha
135 * ..
136 * .. External Subroutines ..
137  EXTERNAL zaxpy, zhemv, zher2
138 * ..
139 * .. External Functions ..
140  COMPLEX*16 zdotc
141  EXTERNAL zdotc
142 * ..
143 * .. Executable Statements ..
144 *
145  IF( tau.EQ.zero )
146  $ return
147 *
148 * Form w:= C * v
149 *
150  CALL zhemv( uplo, n, one, c, ldc, v, incv, zero, work, 1 )
151 *
152  alpha = -half*tau*zdotc( n, work, 1, v, incv )
153  CALL zaxpy( n, alpha, v, incv, work, 1 )
154 *
155 * C := C - v * w' - w * v'
156 *
157  CALL zher2( uplo, n, -tau, v, incv, work, 1, c, ldc )
158 *
159  return
160 *
161 * End of ZLARFY
162 *
163  END