@@ -45,7 +45,7 @@ contains
45
45
${t1}$, intent(in), optional :: alpha
46
46
${t1}$, intent(in), optional :: beta
47
47
character(1), intent(in), optional :: op
48
- ${t1}$ :: alpha_, beta_
48
+ ${t1}$ :: alpha_
49
49
character(1) :: op_
50
50
integer(ilp) :: k, ik, jk
51
51
@@ -57,6 +57,7 @@ contains
57
57
else
58
58
vec_y = zero_${s1}$
59
59
endif
60
+
60
61
associate( data => matrix%data, index => matrix%index, storage => matrix%storage, nnz => matrix%nnz )
61
62
select case(op_)
62
63
case(sparse_op_none)
@@ -132,7 +133,7 @@ contains
132
133
${t1}$, intent(in), optional :: alpha
133
134
${t1}$, intent(in), optional :: beta
134
135
character(1), intent(in), optional :: op
135
- ${t1}$ :: alpha_, beta_
136
+ ${t1}$ :: alpha_
136
137
character(1) :: op_
137
138
integer(ilp) :: i, j
138
139
#:if rank == 1
@@ -144,8 +145,11 @@ contains
144
145
op_ = sparse_op_none; if(present(op)) op_ = op
145
146
alpha_ = one_${k1}$
146
147
if(present(alpha)) alpha_ = alpha
147
- beta_ = zero_${k1}$
148
- if(present(beta)) beta_ = beta
148
+ if(present(beta)) then
149
+ vec_y = beta * vec_y
150
+ else
151
+ vec_y = zero_${s1}$
152
+ endif
149
153
150
154
associate( data => matrix%data, col => matrix%col, rowptr => matrix%rowptr, &
151
155
& nnz => matrix%nnz, nrows => matrix%nrows, ncols => matrix%ncols, storage => matrix%storage )
@@ -156,19 +160,10 @@ contains
156
160
do j = rowptr(i), rowptr(i+1)-1
157
161
aux = aux + data(j) * vec_x(${rksfx2(rank-1)}$col(j))
158
162
end do
159
- if(present(beta)) then
160
- vec_y(${rksfx2(rank-1)}$i) = beta_ * vec_y(${rksfx2(rank-1)}$i) + alpha_ * aux
161
- else
162
- vec_y(${rksfx2(rank-1)}$i) = alpha_ * aux
163
- end if
163
+ vec_y(${rksfx2(rank-1)}$i) = vec_y(${rksfx2(rank-1)}$i) + alpha_ * aux
164
164
end do
165
165
166
166
else if( storage == sparse_full .and. op_==sparse_op_transpose ) then
167
- if(present(beta)) then
168
- vec_y = beta * vec_y
169
- else
170
- vec_y = zero_${s1}$
171
- endif
172
167
do i = 1, nrows
173
168
aux = alpha_ * vec_x(${rksfx2(rank-1)}$i)
174
169
do j = rowptr(i), rowptr(i+1)-1
@@ -185,12 +180,7 @@ contains
185
180
vec_y(${rksfx2(rank-1)}$col(j)) = vec_y(${rksfx2(rank-1)}$col(j)) + data(j) * aux2
186
181
end do
187
182
aux = alpha_ * aux + data(j) * aux2
188
-
189
- if(present(beta)) then
190
- vec_y(${rksfx2(rank-1)}$i) = beta_ * vec_y(${rksfx2(rank-1)}$i) + aux
191
- else
192
- vec_y(${rksfx2(rank-1)}$i) = aux
193
- end if
183
+ vec_y(${rksfx2(rank-1)}$i) = vec_y(${rksfx2(rank-1)}$i) + aux
194
184
end do
195
185
196
186
else if( storage == sparse_upper .and. op_/=sparse_op_hermitian )then
@@ -199,26 +189,13 @@ contains
199
189
aux2 = alpha_ * vec_x(${rksfx2(rank-1)}$i)
200
190
do j = rowptr(i)+1, rowptr(i+1)-1
201
191
aux = aux + data(j) * vec_x(${rksfx2(rank-1)}$col(j))
192
+ vec_y(${rksfx2(rank-1)}$col(j)) = vec_y(${rksfx2(rank-1)}$col(j)) + data(j) * aux2
202
193
end do
203
- if(present(beta)) then
204
- do j = rowptr(i)+1, rowptr(i+1)-1
205
- vec_y(${rksfx2(rank-1)}$col(j)) = beta_ * vec_y(${rksfx2(rank-1)}$col(j)) + data(j) * aux2
206
- end do
207
- else
208
- do j = rowptr(i)+1, rowptr(i+1)-1
209
- vec_y(${rksfx2(rank-1)}$col(j)) = data(j) * aux2
210
- end do
211
- end if
212
194
vec_y(${rksfx2(rank-1)}$i) = vec_y(${rksfx2(rank-1)}$i) + alpha_ * aux
213
195
end do
214
196
215
197
#:if t1.startswith('complex')
216
198
else if( storage == sparse_full .and. op_==sparse_op_hermitian) then
217
- if(present(beta)) then
218
- vec_y = beta * vec_y
219
- else
220
- vec_y = zero_${s1}$
221
- endif
222
199
do i = 1, nrows
223
200
aux = alpha_ * vec_x(${rksfx2(rank-1)}$i)
224
201
do j = rowptr(i), rowptr(i+1)-1
@@ -235,12 +212,7 @@ contains
235
212
vec_y(${rksfx2(rank-1)}$col(j)) = vec_y(${rksfx2(rank-1)}$col(j)) + conjg(data(j)) * aux2
236
213
end do
237
214
aux = alpha_ * aux + conjg(data(j)) * aux2
238
-
239
- if(present(beta)) then
240
- vec_y(${rksfx2(rank-1)}$i) = beta_ * vec_y(${rksfx2(rank-1)}$i) + aux
241
- else
242
- vec_y(${rksfx2(rank-1)}$i) = aux
243
- end if
215
+ vec_y(${rksfx2(rank-1)}$i) = vec_y(${rksfx2(rank-1)}$i) + aux
244
216
end do
245
217
246
218
else if( storage == sparse_upper .and. op_==sparse_op_hermitian )then
@@ -249,16 +221,8 @@ contains
249
221
aux2 = alpha_ * vec_x(${rksfx2(rank-1)}$i)
250
222
do j = rowptr(i)+1, rowptr(i+1)-1
251
223
aux = aux + conjg(data(j)) * vec_x(${rksfx2(rank-1)}$col(j))
224
+ vec_y(${rksfx2(rank-1)}$col(j)) = vec_y(${rksfx2(rank-1)}$col(j)) + conjg(data(j)) * aux2
252
225
end do
253
- if(present(beta)) then
254
- do j = rowptr(i)+1, rowptr(i+1)-1
255
- vec_y(${rksfx2(rank-1)}$col(j)) = beta_ * vec_y(${rksfx2(rank-1)}$col(j)) + conjg(data(j)) * aux2
256
- end do
257
- else
258
- do j = rowptr(i)+1, rowptr(i+1)-1
259
- vec_y(${rksfx2(rank-1)}$col(j)) = conjg(data(j)) * aux2
260
- end do
261
- end if
262
226
vec_y(${rksfx2(rank-1)}$i) = vec_y(${rksfx2(rank-1)}$i) + alpha_ * aux
263
227
end do
264
228
#:endif
@@ -279,7 +243,7 @@ contains
279
243
${t1}$, intent(in), optional :: alpha
280
244
${t1}$, intent(in), optional :: beta
281
245
character(1), intent(in), optional :: op
282
- ${t1}$ :: alpha_, beta_
246
+ ${t1}$ :: alpha_
283
247
character(1) :: op_
284
248
integer(ilp) :: i, j
285
249
#:if rank == 1
@@ -385,7 +349,7 @@ contains
385
349
${t1}$, intent(in), optional :: alpha
386
350
${t1}$, intent(in), optional :: beta
387
351
character(1), intent(in), optional :: op
388
- ${t1}$ :: alpha_, beta_
352
+ ${t1}$ :: alpha_
389
353
character(1) :: op_
390
354
integer(ilp) :: i, j, k
391
355
@@ -452,7 +416,7 @@ contains
452
416
${t1}$, intent(in), optional :: alpha
453
417
${t1}$, intent(in), optional :: beta
454
418
character(1), intent(in), optional :: op
455
- ${t1}$ :: alpha_, beta_
419
+ ${t1}$ :: alpha_
456
420
character(1) :: op_
457
421
integer(ilp) :: i, nz, rowidx, num_chunks, rm
458
422
0 commit comments