3
4
5
6
7
8
9 CHARACTER*1 MODE
10 INTEGER ICONTXT, LDA, LDB, M, N
11 COMPLEX*16 ALPHA, BETA
12
13
14 COMPLEX*16 A( LDA, * ), B( LDB, * )
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
77
78
79
80
81
82
83
84
85
86
87
88
89 COMPLEX*16 ZERO,
90 parameter( zero = ( 0.0d+0, 0.0d+0 ),
91 $ one = ( 1.0d+0, 0.0d+0 ) )
92
93
94 INTEGER I, J
95
96
97 LOGICAL LSAME
99
100
102
103
104 INTRINSIC min, dconjg
105
106
107
108 IF( m.LE.0 .OR. n.LE.0 .OR. (
alpha.EQ.zero.AND.beta.EQ.one ) )
109 $ RETURN
110
111
112
113 IF(
lsame( mode,
'U' ) )
THEN
114 IF(
alpha.EQ.zero )
THEN
115 IF( beta.EQ.zero ) THEN
116 DO 20 j = 1, n
117 DO 10 i = 1,
min( j, m )
118 b( i, j ) = zero
119 10 CONTINUE
120 20 CONTINUE
121 ELSE
122 DO 40 j = 1, n
123 DO 30 i = 1,
min( j, m )
124 b( i, j ) = beta * b( i, j )
125 30 CONTINUE
126 40 CONTINUE
127 END IF
128
129 ELSE IF(
alpha.EQ.one )
THEN
130 IF( beta.EQ.zero ) THEN
131 DO 60 j = 1, n
132 DO 50 i = 1,
min( j, m )
133 b( i, j ) = a( i, j )
134 50 CONTINUE
135 60 CONTINUE
136 ELSE IF( beta.EQ.one ) THEN
137 DO 80 j = 1, n
138 DO 70 i = 1,
min( j, m )
139 b( i, j ) = a( i, j ) + b( i, j )
140 70 CONTINUE
141 80 CONTINUE
142 ELSE
143 DO 100 j = 1, n
144 DO 90 i = 1,
min( j, m )
145 b( i, j ) = a( i, j ) + beta * b( i, j )
146 90 CONTINUE
147 100 CONTINUE
148 END IF
149
150 ELSE
151 IF( beta.EQ.zero ) THEN
152 DO 120 j = 1, n
153 DO 110 i = 1,
min( j, m )
154 b( i, j ) =
alpha * a( i, j )
155 110 CONTINUE
156 120 CONTINUE
157 ELSE IF( beta.EQ.one ) THEN
158 DO 140 j = 1, n
159 DO 130 i = 1,
min( j, m )
160 b( i, j ) =
alpha * a( i, j ) + b( i, j )
161 130 CONTINUE
162 140 CONTINUE
163 ELSE
164 DO 160 j = 1, n
165 DO 150 i = 1,
min( j, m )
166 b( i, j ) =
alpha * a( i, j ) + beta * b( i, j )
167 150 CONTINUE
168 160 CONTINUE
169 END IF
170 END IF
171
172
173
174 ELSE IF(
lsame( mode,
'L' ) )
THEN
175 IF(
alpha.EQ.zero )
THEN
176 IF( beta.EQ.zero ) THEN
177 DO 180 j = 1, n
178 DO 170 i = j, m
179 b( i, j ) = zero
180 170 CONTINUE
181 180 CONTINUE
182 ELSE
183 DO 200 j = 1, n
184 DO 190 i = j, m
185 b( i, j ) = beta * b( i, j )
186 190 CONTINUE
187 200 CONTINUE
188 END IF
189
190 ELSE IF(
alpha.EQ.one )
THEN
191 IF( beta.EQ.zero ) THEN
192 DO 220 j = 1, n
193 DO 210 i = j, m
194 b( i, j ) = a( i, j )
195 210 CONTINUE
196 220 CONTINUE
197 ELSE IF( beta.EQ.one ) THEN
198 DO 240 j = 1, n
199 DO 230 i = j, m
200 b( i, j ) = a( i, j ) + b( i, j )
201 230 CONTINUE
202 240 CONTINUE
203 ELSE
204 DO 260 j = 1, n
205 DO 250 i = j, m
206 b( i, j ) = a( i, j ) + beta * b( i, j )
207 250 CONTINUE
208 260 CONTINUE
209 END IF
210
211 ELSE
212 IF( beta.EQ.zero ) THEN
213 DO 280 j = 1, n
214 DO 270 i = j, m
215 b( i, j ) =
alpha * a( i, j )
216 270 CONTINUE
217 280 CONTINUE
218 ELSE IF( beta.EQ.one ) THEN
219 DO 300 j = 1, n
220 DO 290 i = j, m
221 b( i, j ) =
alpha * a( i, j ) + b( i, j )
222 290 CONTINUE
223 300 CONTINUE
224 ELSE
225 DO 320 j = 1, n
226 DO 310 i = j, m
227 b( i, j ) =
alpha * a( i, j ) + beta * b( i, j )
228 310 CONTINUE
229 320 CONTINUE
230 END IF
231 END IF
232
233
234
235 ELSE IF(
lsame( mode,
'T' ) )
THEN
236 IF(
alpha.EQ.zero )
THEN
237 IF( beta.EQ.zero ) THEN
238 DO 340 j = 1, n
239 DO 330 i = 1, m
240 b( i, j ) = zero
241 330 CONTINUE
242 340 CONTINUE
243 ELSE
244 DO 360 j = 1, n
245 DO 350 i = 1, m
246 b( i, j ) = beta * b( i, j )
247 350 CONTINUE
248 360 CONTINUE
249 END IF
250
251 ELSE IF(
alpha.EQ.one )
THEN
252 IF( beta.EQ.zero ) THEN
253 DO 380 j = 1, n
254 DO 370 i = 1, m
255 b( i, j ) = a( j, i )
256 370 CONTINUE
257 380 CONTINUE
258 ELSE IF( beta.EQ.one ) THEN
259 DO 400 j = 1, n
260 DO 390 i = 1, m
261 b( i, j ) = a( j, i ) + b( i, j )
262 390 CONTINUE
263 400 CONTINUE
264 ELSE
265 DO 420 j = 1, n
266 DO 410 i = 1, m
267 b( i, j ) = a( j, i ) + beta * b( i, j )
268 410 CONTINUE
269 420 CONTINUE
270 END IF
271
272 ELSE
273 IF( beta.EQ.zero ) THEN
274 DO 440 j = 1, n
275 DO 430 i = 1, m
276 b( i, j ) =
alpha * a( j, i )
277 430 CONTINUE
278 440 CONTINUE
279 ELSE IF( beta.EQ.one ) THEN
280 DO 460 j = 1, n
281 DO 450 i = 1, m
282 b( i, j ) =
alpha * a( j, i ) + b( i, j )
283 450 CONTINUE
284 460 CONTINUE
285 ELSE
286 DO 480 j = 1, n
287 DO 470 i = 1, m
288 b( i, j ) =
alpha * a( j, i ) + beta * b( i, j )
289 470 CONTINUE
290 480 CONTINUE
291 END IF
292 END IF
293
294
295
296 ELSE IF(
lsame( mode,
'C' ) )
THEN
297 IF(
alpha.EQ.zero )
THEN
298 IF( beta.EQ.zero ) THEN
299 DO 500 j = 1, n
300 DO 490 i = 1, m
301 b( i, j ) = zero
302 490 CONTINUE
303 500 CONTINUE
304 ELSE
305 DO 520 j = 1, n
306 DO 510 i = 1, m
307 b( i, j ) = beta * b( i, j )
308 510 CONTINUE
309 520 CONTINUE
310 END IF
311
312 ELSE IF(
alpha.EQ.one )
THEN
313 IFTHEN
314 DO 540 j = 1, n
315 DO 530 i = 1, m
316 b( i, j ) = dconjg( a( j, i ) )
317 530 CONTINUE
318 540 CONTINUE
319 ELSE IF( beta.EQ.one ) THEN
320 DO 560 j = 1, n
321 DO 550 i = 1, m
322 b( i, j ) = dconjg( a( j, i ) ) + b( i, j )
323 550 CONTINUE
324 560 CONTINUE
325 ELSE
326 DO 580 j = 1, n
327 DO 570 i = 1, m
328 b( i, j ) = dconjg( a( j, i ) ) + beta * b( i, j )
329 570 CONTINUE
330 580 CONTINUE
331 END IF
332
333 ELSE
334 IF( beta.EQ.zero ) THEN
335 DO 600 j = 1, n
336 DO 590 i = 1, m
337 b( i, j ) =
alpha * dconjg( a( j, i ) )
338 590 CONTINUE
339 600 CONTINUE
340 ELSE IF( beta.EQ.one ) THEN
341 DO 620 j = 1, n
342 DO 610 i = 1, m
343 b( i, j ) =
alpha * dconjg( a( j, i ) ) + b( i, j )
344 610 CONTINUE
345 620 CONTINUE
346 ELSE
347 DO 640 j = 1, n
348 DO 630 i = 1, m
349 b( i, j ) =
alpha * dconjg( a( j, i ) )
350 $ + beta * b( i, j )
351 630 CONTINUE
352 640 CONTINUE
353 END IF
354 END IF
355
356
357
358 ELSE
359 IF(
alpha.EQ.zero )
THEN
360 IF( beta.EQ.zero ) THEN
361 DO 660 j = 1, n
362 DO 650 i = 1, m
363 b( i, j ) = zero
364 650 CONTINUE
365 660 CONTINUE
366
367 ELSE
368 IF( m.EQ.ldb ) THEN
369 CALL zscal( m*n, beta, b( 1, 1 ), 1 )
370 ELSE IF(
lsame( mode,
'V' ) )
THEN
371 DO 670 j = 1, n
372 CALL zscal( m, beta, b( 1, j ), 1 )
373 670 CONTINUE
374 ELSE
375 DO 690 j = 1, n
376 DO 680 i = 1, m
377
378 680 CONTINUE
379 690 CONTINUE
380 END IF
381 END IF
382
383 ELSE IF(
alpha.EQ.one )
THEN
384 IF( beta.EQ.zero ) THEN
385 IF( m.EQ.lda .AND. m.EQ.ldb ) THEN
386 CALL zcopy( m*n, a( 1, 1 ), 1, b( 1, 1 ), 1 )
387 ELSE IF(
lsame( mode,
'V' ) )
THEN
388 DO 700 j = 1, n
389 CALL zcopy( m, a( 1, j ), 1, b( 1, j ), 1 )
390 700 CONTINUE
391 ELSE
392 DO 720 j = 1, n
393 DO 710 i = 1, m
394 b( i, j ) = a( i, j )
395 710 CONTINUE
396 720 CONTINUE
397 END IF
398
399 ELSE IF( beta.EQ.one ) THEN
400 DO 740 j = 1, n
401 DO 730 i = 1, m
402 b( i, j ) = a( i, j ) + b( i, j )
403 730 CONTINUE
404 740 CONTINUE
405
406 ELSE
407 DO 760 j = 1, n
408 DO 750 i = 1, m
409 b( i, j ) = a( i, j ) + beta * b( i, j )
410 750 CONTINUE
411 760 CONTINUE
412 END IF
413
414 ELSE
415 IF( beta.EQ.zero ) THEN
416 DO 780 j = 1, n
417 DO 770 i = 1, m
418 b( i, j ) =
alpha * a( i, j )
419 770 CONTINUE
420 780 CONTINUE
421
422 ELSE IF( beta.EQ.one ) THEN
423 IF( m.EQ.lda .AND. m.EQ.ldb ) THEN
424 CALL zaxpy( m*n,
alpha, a( 1, 1 ), 1, b( 1, 1 ), 1 )
425 ELSE IF(
lsame( mode,
'V' ) )
THEN
426 DO 790 j = 1, n
427 CALL zaxpy( m,
alpha, a( 1, j ), 1, b( 1, j ), 1 )
428 790 CONTINUE
429 ELSE
430 DO 810 j = 1, n
431 DO 800 i = 1, m
432 b( i, j ) =
alpha * a( i, j ) + b( i, j )
433 800 CONTINUE
434 810 CONTINUE
435 END IF
436
437 ELSE
438 DO 830 j = 1, n
439 DO 820 i = 1, m
440 b( i, j ) =
alpha * a( i, j ) + beta * b( i, j )
441 820 CONTINUE
442 830 CONTINUE
443 END IF
444 END IF
445 END IF
446
447 RETURN
448
449
450
logical function lsame(ca, cb)
LSAME
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine zaxpy(n, za, zx, incx, zy, incy)
ZAXPY
subroutine zscal(n, za, zx, incx)
ZSCAL