2
3
4
5
6
7
8
9 INTEGER LDA, LDB, M, N
10 COMPLEX*16 ALPHA, BETA
11
12
13 COMPLEX*16 A( LDA, * ), B( LDB, * )
14
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 COMPLEX*16 ONE, ZERO
70 parameter( one = ( 1.0d+0, 0.0d+0 ),
71 $ zero = ( 0.0d+0, 0.0d+0 ) )
72
73
74 INTEGER I, J
75
76
78
79
80
81 IF( m.GE.n ) THEN
82 IF(
alpha.EQ.one )
THEN
83 IF( beta.EQ.zero ) THEN
84 DO 20 j = 1, n
85 CALL zcopy( m, a( 1, j ), 1, b( j, 1 ), ldb )
86
87
88
89 20 CONTINUE
90 ELSE IF( beta.NE.one ) THEN
91 DO 40 j = 1, n
92 DO 30 i = 1, m
93 b( j, i ) = a( i, j ) + beta * b( j, i )
94 30 CONTINUE
95 40 CONTINUE
96 ELSE
97 DO 60 j = 1, n
98 CALL zaxpy( m, one, a( 1, j ), 1, b( j, 1 ), ldb )
99
100
101
102 60 CONTINUE
103 END IF
104 ELSE IF(
alpha.NE.zero )
THEN
105 IF( beta.EQ.zero ) THEN
106 DO 80 j = 1, n
107 DO 70 i = 1, m
108 b( j, i ) =
alpha * a( i, j )
109 70 CONTINUE
110 80 CONTINUE
111 ELSE IF( beta.NE.one ) THEN
112 DO 100 j = 1, n
113 DO 90 i = 1, m
114 b( j, i ) =
alpha * a( i, j ) + beta * b( j, i )
115 90 CONTINUE
116 100 CONTINUE
117 ELSE
118 DO 120 j = 1, n
119 CALL zaxpy( m,
alpha, a( 1, j ), 1, b( j, 1 ), ldb )
120
121
122
123 120 CONTINUE
124 END IF
125 ELSE
126 IF( beta.EQ.zero ) THEN
127 DO 140 j = 1, m
128 DO 130 i = 1, n
129 b( i, j ) = zero
130 130 CONTINUE
131 140 CONTINUE
132 ELSE IF( beta.NE.one ) THEN
133 DO 160 j = 1, m
134 CALL zscal( n, beta, b( 1, j ), 1 )
135
136
137
138 160 CONTINUE
139 END IF
140 END IF
141 ELSE
142 IF(
alpha.EQ.one )
THEN
143 IF( beta.EQ.zero ) THEN
144 DO 180 j = 1, m
145 CALL zcopy( n, a( j, 1 ), lda, b( 1, j ), 1 )
146
147
148
149 180 CONTINUE
150 ELSE IF( beta.NE.one ) THEN
151 DO 200 j = 1, m
152 DO 190 i = 1, n
153 b( i, j ) = a( j, i ) + beta * b( i, j )
154 190 CONTINUE
155 200 CONTINUE
156 ELSE
157 DO 220 j = 1, m
158 CALL zaxpy( n, one, a( j, 1 ), lda, b( 1, j ), 1 )
159
160
161
162 220 CONTINUE
163 END IF
164 ELSE IF(
alpha.NE.zero )
THEN
165 IF( beta.EQ.zero ) THEN
166 DO 240 j = 1, m
167 DO 230 i = 1, n
168 b( i, j ) =
alpha * a( j, i )
169 230 CONTINUE
170 240 CONTINUE
171 ELSE IF( beta.NE.one ) THEN
172 DO 260 j = 1, m
173 DO 250 i = 1, n
174 b( i, j ) =
alpha * a( j, i ) + beta * b( i, j )
175 250 CONTINUE
176 260 CONTINUE
177 ELSE
178 DO 280 j = 1, m
179 CALL zaxpy( n,
alpha, a( j, 1 ), lda, b( 1, j ), 1 )
180
181
182
183 280 CONTINUE
184 END IF
185 ELSE
186 IF( beta.EQ.zero ) THEN
187 DO 300 j = 1, m
188 DO 290 i = 1, n
189 b( i, j ) = zero
190 290 CONTINUE
191 300 CONTINUE
192 ELSE IF( beta.NE.one ) THEN
193 DO 320 j = 1, m
194 CALL zscal( n, beta, b( 1, j ), 1 )
195
196
197
198 320 CONTINUE
199 END IF
200 END IF
201 END IF
202
203 RETURN
204
205
206
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine zaxpy(n, za, zx, incx, zy, incy)
ZAXPY
subroutine zscal(n, za, zx, incx)
ZSCAL