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