LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches
srotm.f
Go to the documentation of this file.
1*> \brief \b SROTM
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 SROTM(N,SX,INCX,SY,INCY,SPARAM)
12*
13* .. Scalar Arguments ..
14* INTEGER INCX,INCY,N
15* ..
16* .. Array Arguments ..
17* REAL SPARAM(5),SX(*),SY(*)
18* ..
19*
20*
21*> \par Purpose:
22* =============
23*>
24*> \verbatim
25*>
26*> APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX
27*>
28*> (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN
29*> (SX**T)
30*>
31*> SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE
32*> LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY.
33*> WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS..
34*>
35*> SFLAG=-1.E0 SFLAG=0.E0 SFLAG=1.E0 SFLAG=-2.E0
36*>
37*> (SH11 SH12) (1.E0 SH12) (SH11 1.E0) (1.E0 0.E0)
38*> H=( ) ( ) ( ) ( )
39*> (SH21 SH22), (SH21 1.E0), (-1.E0 SH22), (0.E0 1.E0).
40*> SEE SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM.
41*>
42*> \endverbatim
43*
44* Arguments:
45* ==========
46*
47*> \param[in] N
48*> \verbatim
49*> N is INTEGER
50*> number of elements in input vector(s)
51*> \endverbatim
52*>
53*> \param[in,out] SX
54*> \verbatim
55*> SX is REAL array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
56*> \endverbatim
57*>
58*> \param[in] INCX
59*> \verbatim
60*> INCX is INTEGER
61*> storage spacing between elements of SX
62*> \endverbatim
63*>
64*> \param[in,out] SY
65*> \verbatim
66*> SY is REAL array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
67*> \endverbatim
68*>
69*> \param[in] INCY
70*> \verbatim
71*> INCY is INTEGER
72*> storage spacing between elements of SY
73*> \endverbatim
74*>
75*> \param[in] SPARAM
76*> \verbatim
77*> SPARAM is REAL array, dimension (5)
78*> SPARAM(1)=SFLAG
79*> SPARAM(2)=SH11
80*> SPARAM(3)=SH21
81*> SPARAM(4)=SH12
82*> SPARAM(5)=SH22
83*> \endverbatim
84*
85* Authors:
86* ========
87*
88*> \author Univ. of Tennessee
89*> \author Univ. of California Berkeley
90*> \author Univ. of Colorado Denver
91*> \author NAG Ltd.
92*
93*> \ingroup rotm
94*
95* =====================================================================
96 SUBROUTINE srotm(N,SX,INCX,SY,INCY,SPARAM)
97*
98* -- Reference BLAS level1 routine --
99* -- Reference BLAS is a software package provided by Univ. of Tennessee, --
100* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
101*
102* .. Scalar Arguments ..
103 INTEGER INCX,INCY,N
104* ..
105* .. Array Arguments ..
106 REAL SPARAM(5),SX(*),SY(*)
107* ..
108*
109* =====================================================================
110*
111* .. Local Scalars ..
112 REAL SFLAG,SH11,SH12,SH21,SH22,TWO,W,Z,ZERO
113 INTEGER I,KX,KY,NSTEPS
114* ..
115* .. Data statements ..
116 DATA zero,two/0.e0,2.e0/
117* ..
118*
119 sflag = sparam(1)
120 IF (n.LE.0 .OR. (sflag+two.EQ.zero)) RETURN
121 IF (incx.EQ.incy.AND.incx.GT.0) THEN
122*
123 nsteps = n*incx
124 IF (sflag.LT.zero) THEN
125 sh11 = sparam(2)
126 sh12 = sparam(4)
127 sh21 = sparam(3)
128 sh22 = sparam(5)
129 DO i = 1,nsteps,incx
130 w = sx(i)
131 z = sy(i)
132 sx(i) = w*sh11 + z*sh12
133 sy(i) = w*sh21 + z*sh22
134 END DO
135 ELSE IF (sflag.EQ.zero) THEN
136 sh12 = sparam(4)
137 sh21 = sparam(3)
138 DO i = 1,nsteps,incx
139 w = sx(i)
140 z = sy(i)
141 sx(i) = w + z*sh12
142 sy(i) = w*sh21 + z
143 END DO
144 ELSE
145 sh11 = sparam(2)
146 sh22 = sparam(5)
147 DO i = 1,nsteps,incx
148 w = sx(i)
149 z = sy(i)
150 sx(i) = w*sh11 + z
151 sy(i) = -w + sh22*z
152 END DO
153 END IF
154 ELSE
155 kx = 1
156 ky = 1
157 IF (incx.LT.0) kx = 1 + (1-n)*incx
158 IF (incy.LT.0) ky = 1 + (1-n)*incy
159*
160 IF (sflag.LT.zero) THEN
161 sh11 = sparam(2)
162 sh12 = sparam(4)
163 sh21 = sparam(3)
164 sh22 = sparam(5)
165 DO i = 1,n
166 w = sx(kx)
167 z = sy(ky)
168 sx(kx) = w*sh11 + z*sh12
169 sy(ky) = w*sh21 + z*sh22
170 kx = kx + incx
171 ky = ky + incy
172 END DO
173 ELSE IF (sflag.EQ.zero) THEN
174 sh12 = sparam(4)
175 sh21 = sparam(3)
176 DO i = 1,n
177 w = sx(kx)
178 z = sy(ky)
179 sx(kx) = w + z*sh12
180 sy(ky) = w*sh21 + z
181 kx = kx + incx
182 ky = ky + incy
183 END DO
184 ELSE
185 sh11 = sparam(2)
186 sh22 = sparam(5)
187 DO i = 1,n
188 w = sx(kx)
189 z = sy(ky)
190 sx(kx) = w*sh11 + z
191 sy(ky) = -w + sh22*z
192 kx = kx + incx
193 ky = ky + incy
194 END DO
195 END IF
196 END IF
197 RETURN
198*
199* End of SROTM
200*
201 END
subroutine srotm(n, sx, incx, sy, incy, sparam)
SROTM
Definition srotm.f:97