1*> \brief \b CLARFY 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 CLARFY( UPLO, N, V, INCV, TAU, C, LDC, WORK ) 12* 13* .. Scalar Arguments .. 14* CHARACTER UPLO 15* INTEGER INCV, LDC, N 16* COMPLEX TAU 17* .. 18* .. Array Arguments .. 19* COMPLEX C( LDC, * ), V( * ), WORK( * ) 20* .. 21* 22* 23*> \par Purpose: 24* ============= 25*> 26*> \verbatim 27*> 28*> CLARFY 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 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 75*> The value tau as described above. 76*> \endverbatim 77*> 78*> \param[in,out] C 79*> \verbatim 80*> C is COMPLEX 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 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*> \ingroup complex_eig 105* 106* ===================================================================== 107 SUBROUTINE CLARFY( UPLO, N, V, INCV, TAU, C, LDC, WORK ) 108* 109* -- LAPACK test routine -- 110* -- LAPACK is a software package provided by Univ. of Tennessee, -- 111* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 112* 113* .. Scalar Arguments .. 114 CHARACTER UPLO 115 INTEGER INCV, LDC, N 116 COMPLEX TAU 117* .. 118* .. Array Arguments .. 119 COMPLEX C( LDC, * ), V( * ), WORK( * ) 120* .. 121* 122* ===================================================================== 123* 124* .. Parameters .. 125 COMPLEX ONE, ZERO, HALF 126 PARAMETER ( ONE = ( 1.0E+0, 0.0E+0 ), 127 $ ZERO = ( 0.0E+0, 0.0E+0 ), 128 $ HALF = ( 0.5E+0, 0.0E+0 ) ) 129* .. 130* .. Local Scalars .. 131 COMPLEX ALPHA 132* .. 133* .. External Subroutines .. 134 EXTERNAL CAXPY, CHEMV, CHER2 135* .. 136* .. External Functions .. 137 COMPLEX CDOTC 138 EXTERNAL CDOTC 139* .. 140* .. Executable Statements .. 141* 142 IF( TAU.EQ.ZERO ) 143 $ RETURN 144* 145* Form w:= C * v 146* 147 CALL CHEMV( UPLO, N, ONE, C, LDC, V, INCV, ZERO, WORK, 1 ) 148* 149 ALPHA = -HALF*TAU*CDOTC( N, WORK, 1, V, INCV ) 150 CALL CAXPY( N, ALPHA, V, INCV, WORK, 1 ) 151* 152* C := C - v * w' - w * v' 153* 154 CALL CHER2( UPLO, N, -TAU, V, INCV, WORK, 1, C, LDC ) 155* 156 RETURN 157* 158* End of CLARFY 159* 160 END 161