01:       SUBROUTINE SLARGV( N, X, INCX, Y, INCY, C, INCC )
02: *
03: *  -- LAPACK auxiliary routine (version 3.2) --
04: *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
05: *     November 2006
06: *
07: *     .. Scalar Arguments ..
08:       INTEGER            INCC, INCX, INCY, N
09: *     ..
10: *     .. Array Arguments ..
11:       REAL               C( * ), X( * ), Y( * )
12: *     ..
13: *
14: *  Purpose
15: *  =======
16: *
17: *  SLARGV generates a vector of real plane rotations, determined by
18: *  elements of the real vectors x and y. For i = 1,2,...,n
19: *
20: *     (  c(i)  s(i) ) ( x(i) ) = ( a(i) )
21: *     ( -s(i)  c(i) ) ( y(i) ) = (   0  )
22: *
23: *  Arguments
24: *  =========
25: *
26: *  N       (input) INTEGER
27: *          The number of plane rotations to be generated.
28: *
29: *  X       (input/output) REAL array,
30: *                         dimension (1+(N-1)*INCX)
31: *          On entry, the vector x.
32: *          On exit, x(i) is overwritten by a(i), for i = 1,...,n.
33: *
34: *  INCX    (input) INTEGER
35: *          The increment between elements of X. INCX > 0.
36: *
37: *  Y       (input/output) REAL array,
38: *                         dimension (1+(N-1)*INCY)
39: *          On entry, the vector y.
40: *          On exit, the sines of the plane rotations.
41: *
42: *  INCY    (input) INTEGER
43: *          The increment between elements of Y. INCY > 0.
44: *
45: *  C       (output) REAL array, dimension (1+(N-1)*INCC)
46: *          The cosines of the plane rotations.
47: *
48: *  INCC    (input) INTEGER
49: *          The increment between elements of C. INCC > 0.
50: *
51: *  =====================================================================
52: *
53: *     .. Parameters ..
54:       REAL               ZERO, ONE
55:       PARAMETER          ( ZERO = 0.0E+0, ONE = 1.0E+0 )
56: *     ..
57: *     .. Local Scalars ..
58:       INTEGER            I, IC, IX, IY
59:       REAL               F, G, T, TT
60: *     ..
61: *     .. Intrinsic Functions ..
62:       INTRINSIC          ABS, SQRT
63: *     ..
64: *     .. Executable Statements ..
65: *
66:       IX = 1
67:       IY = 1
68:       IC = 1
69:       DO 10 I = 1, N
70:          F = X( IX )
71:          G = Y( IY )
72:          IF( G.EQ.ZERO ) THEN
73:             C( IC ) = ONE
74:          ELSE IF( F.EQ.ZERO ) THEN
75:             C( IC ) = ZERO
76:             Y( IY ) = ONE
77:             X( IX ) = G
78:          ELSE IF( ABS( F ).GT.ABS( G ) ) THEN
79:             T = G / F
80:             TT = SQRT( ONE+T*T )
81:             C( IC ) = ONE / TT
82:             Y( IY ) = T*C( IC )
83:             X( IX ) = F*TT
84:          ELSE
85:             T = F / G
86:             TT = SQRT( ONE+T*T )
87:             Y( IY ) = ONE / TT
88:             C( IC ) = T*Y( IY )
89:             X( IX ) = G*TT
90:          END IF
91:          IC = IC + INCC
92:          IY = IY + INCY
93:          IX = IX + INCX
94:    10 CONTINUE
95:       RETURN
96: *
97: *     End of SLARGV
98: *
99:       END
100: