3
4
5
6
7
8
9 CHARACTER*1 MODE
10 INTEGER ICONTXT, INCX, INCY, N
11 REAL ALPHA, BETA
12
13
14 REAL X( * ), Y( * )
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 REAL ZERO, ONE
77 parameter( zero = 0.0e+0, one = 1.0e+0)
78
79
80 INTEGER I, IX, IY
81
82
83 LOGICAL LSAME
85
86
87 EXTERNAL sscal, scopy, saxpy
88
89
90
91 IF( n.LE.0 .OR. ( alpha.EQ.zero .AND. beta.EQ.one ) ) RETURN
92
93 IF( alpha.EQ.zero ) THEN
94 IF( beta.EQ.zero ) THEN
95 IF( incy.EQ.1 ) THEN
96 DO 10 i = 1, n
97 y( i ) = zero
98 10 CONTINUE
99 ELSE
100 iy = 1
101 DO 20 i = 1, n
102 y( iy ) = zero
103 iy = iy + incy
104 20 CONTINUE
105 END IF
106
107 ELSE
108 IF(
lsame( mode,
'V' ) )
THEN
109 CALL sscal( n, beta, y, incy )
110 ELSE IF( incy.EQ.1 ) THEN
111 DO 30 i = 1, n
112 y( i ) = beta * y( i )
113 30 CONTINUE
114 ELSE
115 iy = 1
116 DO 40 i = 1, n
117 y( iy ) = beta * y( iy )
118 iy = iy + incy
119 40 CONTINUE
120 END IF
121 END IF
122
123 ELSE
124 IF( alpha.EQ.one ) THEN
125 IF( beta.EQ.zero ) THEN
126 IF(
lsame( mode,
'V' ) )
THEN
127 CALL scopy( n, x, incx, y, incy )
128 ELSE IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
129 DO 50 i = 1, n
130 y( i ) = x( i )
131 50 CONTINUE
132 ELSE
133 ix = 1
134 iy = 1
135 DO 60 i = 1, n
136 y( iy ) = x( ix )
137 ix = ix + incx
138 iy = iy + incy
139 60 CONTINUE
140 END IF
141
142 ELSE IF( beta.EQ.one ) THEN
143 IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
144 DO 70 i = 1, n
145 y( i ) = x( i ) + y( i )
146 70 CONTINUE
147 ELSE
148 ix = 1
149 iy = 1
150 DO 80 i = 1, n
151 y( iy ) = x( ix ) + y( iy )
152 ix = ix + incx
153 iy = iy + incy
154 80 CONTINUE
155 END IF
156
157 ELSE
158 IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
159 DO 90 i = 1, n
160 y( i ) = x( i ) + beta * y( i )
161 90 CONTINUE
162 ELSE
163 ix = 1
164 iy = 1
165 DO 100 i = 1, n
166 y( iy ) = x( ix ) + beta * y( iy )
167 ix = ix + incx
168 iy = iy + incy
169 100 CONTINUE
170 END IF
171 END IF
172
173 ELSE
174 IF( beta.EQ.zero ) THEN
175 IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
176 DO 110 i = 1, n
177 y( i ) = alpha * x( i )
178 110 CONTINUE
179 ELSE
180 ix = 1
181 iy = 1
182 DO 120 i = 1, n
183 y( iy ) = x( ix )
184 ix = ix + incx
185 iy = iy + incy
186 120 CONTINUE
187 END IF
188
189 ELSE IF( beta.EQ.one ) THEN
190 IF(
lsame( mode,
'V' ) )
THEN
191 CALL saxpy( n, alpha, x, incx, y, incy )
192 ELSE IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
193 DO 130 i = 1, n
194 y( i ) = alpha * x( i ) + y( i )
195 130 CONTINUE
196 ELSE
197 ix = 1
198 iy = 1
199 DO 140 i = 1, n
200 y( iy ) = alpha * x( ix ) + y( iy )
201 ix = ix + incx
202 iy = iy + incy
203 140 CONTINUE
204 END IF
205
206 ELSE
207 IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
208 DO 150 i = 1, n
209 y( i ) = alpha * x( i ) + beta * y( i )
210 150 CONTINUE
211 ELSE
212 ix = 1
213 iy = 1
214 DO 160 i = 1, n
215 y( iy ) = alpha * x( ix ) + beta * y( iy )
216 ix = ix + incx
217 iy = iy + incy
218 160 CONTINUE
219 END IF
220 END IF
221 END IF
222 END IF
223
224 RETURN
225
226
227