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 December 2016
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.7.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: * December 2016
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
CVSweb interface <joel.bertrand@systella.fr>