1*> \brief \b SLARFY 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 SLARFY( UPLO, N, V, INCV, TAU, C, LDC, WORK ) 12* 13* .. Scalar Arguments .. 14* CHARACTER UPLO 15* INTEGER INCV, LDC, N 16* REAL TAU 17* .. 18* .. Array Arguments .. 19* REAL C( LDC, * ), V( * ), WORK( * ) 20* .. 21* 22* 23*> \par Purpose: 24* ============= 25*> 26*> \verbatim 27*> 28*> SLARFY applies an elementary reflector, or Householder matrix, H, 29*> to an n x n symmetric 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*> symmetric 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 REAL 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 REAL 75*> The value tau as described above. 76*> \endverbatim 77*> 78*> \param[in,out] C 79*> \verbatim 80*> C is REAL 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 REAL 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 single_eig 105* 106* ===================================================================== 107 SUBROUTINE SLARFY( 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 REAL TAU 117* .. 118* .. Array Arguments .. 119 REAL C( LDC, * ), V( * ), WORK( * ) 120* .. 121* 122* ===================================================================== 123* 124* .. Parameters .. 125 REAL ONE, ZERO, HALF 126 PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0, HALF = 0.5E+0 ) 127* .. 128* .. Local Scalars .. 129 REAL ALPHA 130* .. 131* .. External Subroutines .. 132 EXTERNAL SAXPY, SSYMV, SSYR2 133* .. 134* .. External Functions .. 135 REAL SDOT 136 EXTERNAL SDOT 137* .. 138* .. Executable Statements .. 139* 140 IF( TAU.EQ.ZERO ) 141 $ RETURN 142* 143* Form w:= C * v 144* 145 CALL SSYMV( UPLO, N, ONE, C, LDC, V, INCV, ZERO, WORK, 1 ) 146* 147 ALPHA = -HALF*TAU*SDOT( N, WORK, 1, V, INCV ) 148 CALL SAXPY( N, ALPHA, V, INCV, WORK, 1 ) 149* 150* C := C - v * w' - w * v' 151* 152 CALL SSYR2( UPLO, N, -TAU, V, INCV, WORK, 1, C, LDC ) 153* 154 RETURN 155* 156* End of SLARFY 157* 158 END 159