3
4
5
6
7
8
9 CHARACTER*1 MODE
10 INTEGER ICONTXT, INCX, INCY, N
11 DOUBLE PRECISION ALPHA, BETA
12
13
14 DOUBLE PRECISION 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 DOUBLE PRECISION ZERO, ONE
77 parameter( zero = 0.0d+0, one = 1.0d+0)
78
79
80 INTEGER I, IX, IY
81
82
83 LOGICAL LSAME
85
86
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 dscal( 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 dcopy( 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
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
logical function lsame(ca, cb)
LSAME
subroutine dscal(n, da, dx, incx)
DSCAL
subroutine daxpy(n, da, dx, incx, dy, incy)
DAXPY
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY