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