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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250 char TrA, Yroc, * tbeta, top;
251 Int Acol, Ai, Aii, Aimb1, Ainb1, Aj, Ajj, Ald, Amb, Amp, Anb,
252 Anq, Arow, XAfr, Xi, Xj, YAfr, YApbY, YAsum, Ycol, Yi, Yii,
253 Yj, Yjj, Yld, Ynp, Ynq, Yrow, ctxt, info, ione=1, mycol,
254 myrow, nota, npcol, nprow;
256
257
258
261 char * XA = NULL, * YA = NULL;
262
263
264
265
270#ifndef NO_ARGCHK
271
272
273
275 if( !( info = ( ( nprow == -1 ) ? -( 801 +
CTXT_ ) : 0 ) ) )
276 {
277 if( ( !nota ) && ( TrA !=
CTRAN ) && ( TrA !=
CCOTRAN ) )
278 {
279 PB_Cwarn( ctxt, __LINE__,
"PDGEMV",
"Illegal TRANS=%c\n", TrA );
280 info = -1;
281 }
282 PB_Cchkmat( ctxt,
"PDGEMV",
"A", *M, 2, *N, 3, Ai, Aj, Ad, 8,
283 &info );
284 if( nota )
285 {
286 PB_Cchkvec( ctxt,
"PDGEMV",
"X", *N, 3, Xi, Xj, Xd, *INCX, 12,
287 &info );
288 PB_Cchkvec( ctxt,
"PDGEMV",
"Y", *M, 2, Yi, Yj, Yd, *INCY, 18,
289 &info );
290 }
291 else
292 {
293 PB_Cchkvec( ctxt,
"PDGEMV",
"X", *M, 2, Xi, Xj, Xd, *INCX, 12,
294 &info );
295 PB_Cchkvec( ctxt,
"PDGEMV",
"Y", *N, 3, Yi, Yj, Yd, *INCY, 18,
296 &info );
297 }
298 }
299 if( info ) {
PB_Cabort( ctxt,
"PDGEMV", info );
return; }
300#endif
301
302
303
304 if( ( *M == 0 ) || ( *N == 0 ) ||
306 return;
307
308
309
310#ifdef NO_ARGCHK
312#endif
313
314
315
317
318
319
321 {
322
323
324
325 PB_Cinfog2l( Yi, Yj, Yd, nprow, npcol, myrow, mycol, &Yii, &Yjj,
326 &Yrow, &Ycol );
327
328 if( *INCY == Yd[
M_] )
329 {
330
331
332
333 if( ( myrow == Yrow ) || ( Yrow < 0 ) )
334 {
335
336
337
340 if( Ynq > 0 )
341 {
344 {
345 dset_( &Ynq, ((
char *) BETA),
Mptr( ((
char *) Y), Yii,
346 Yjj, Yld, type->
size ), &Yld );
347 }
348 else
349 {
350 dscal_( &Ynq, ((
char *) BETA),
Mptr( ((
char *) Y), Yii,
351 Yjj, Yld, type->
size ), &Yld );
352 }
353 }
354 }
355 }
356 else
357 {
358
359
360
361 if( ( mycol == Ycol ) || ( Ycol < 0 ) )
362 {
363
364
365
368 if( Ynp > 0 )
369 {
371 {
372 dset_( &Ynp, ((
char *) BETA),
Mptr( ((
char *) Y), Yii,
373 Yjj, Yd[
LLD_], type->
size ), INCY );
374 }
375 else
376 {
377 dscal_( &Ynp, ((
char *) BETA),
Mptr( ((
char *) Y), Yii,
378 Yjj, Yd[
LLD_], type->
size ), INCY );
379 }
380 }
381 }
382 }
383 return;
384 }
385
386
387
388 PB_Cdescribe( *M, *N, Ai, Aj, Ad, nprow, npcol, myrow, mycol, &Aii, &Ajj,
389 &Ald, &Aimb1, &Ainb1, &Amb, &Anb, &Arow, &Acol, Ad0 );
390
392
393 if( nota )
394 {
395
396
397
399 Yi, Yj, Yd, &Yroc, &tbeta, &YA, YAd, &YAfr, &YAsum, &YApbY );
400
401
402
403 PB_CInV( type,
NOCONJG,
ROW, *M, *N, Ad0, 1, ((
char *) X), Xi, Xj, Xd,
404 ( *INCX == Xd[
M_] ?
ROW :
COLUMN ), &XA, XAd, &XAfr );
405
406
407
410 if( ( Amp > 0 ) && ( Anq > 0 ) )
411 {
412 dgemv_( TRANS, &Amp, &Anq, ((
char *) ALPHA),
Mptr( ((
char *)A),
413 Aii, Ajj, Ald, type->
size ), &Ald, XA, &XAd[
LLD_], tbeta,
414 YA, &ione );
415 }
416 if( XAfr ) free( XA );
417
418
419
420 if( YAsum && ( Amp > 0 ) )
421 {
425 }
426
427
428
429 if( YApbY )
430 {
431 PB_Cpaxpby( type,
NOCONJG, *M, 1, type->
one, YA, 0, 0, YAd,
COLUMN,
432 ((char *) BETA), ((char *) Y), Yi, Yj, Yd, &Yroc );
433 }
434 }
435 else
436 {
437
438
439
440 PB_CInOutV( type,
ROW, *M, *N, Ad0, 1, ((
char *) BETA), ((
char *) Y), Yi,
441 Yj, Yd, &Yroc, &tbeta, &YA, YAd, &YAfr, &YAsum, &YApbY );
442
443
444
445 PB_CInV( type,
NOCONJG,
COLUMN, *M, *N, Ad0, 1, ((
char *) X), Xi, Xj, Xd,
446 ( *INCX == Xd[
M_] ?
ROW :
COLUMN ), &XA, XAd, &XAfr );
447
448
449
452 if( ( Amp > 0 ) && ( Anq > 0 ) )
453 {
454 dgemv_( TRANS, &Amp, &Anq, ((
char *) ALPHA),
Mptr( ((
char *)A),
455 Aii, Ajj, Ald, type->
size ), &Ald, XA, &ione, tbeta,
457 }
458 if( XAfr ) free( XA );
459
460
461
462 if( YAsum && ( Anq > 0 ) )
463 {
466 mycol );
467 }
468
469
470
471 if( YApbY )
472 {
473 PB_Cpaxpby( type,
NOCONJG, 1, *N, type->
one, YA, 0, 0, YAd,
ROW,
474 ((char *) BETA), ((char *) Y), Yi, Yj, Yd, &Yroc );
475 }
476 }
477 if( YAfr ) free( YA );
478
479
480
481}