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