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
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 char UploA, herm, type;
174 Int Acol, Arow, Aii, Aimb1, Ainb1, Ajj, Akp, Akq, Ald, Amb, Amp,
175 Amp0, Anb, Anq, Anq0, ctxt, izero=0, k, kb, ktmp, mn, mycol,
176 myrow, nb, npcol, nprow, size;
178
179
180
182 char * Aptr = NULL;
183
184
185
186
187
188
189
190 if( ( M <= 0 ) || ( N <= 0 ) ) return;
191
192
193
197
199 {
201 {
203 JA, DESCA );
204 return;
205 }
207 }
208 else if( type ==
DREAL )
209 {
211 {
213 JA, DESCA );
214 return;
215 }
217 }
218 else if( type ==
SCPLX )
219 {
221 {
223 {
225 IA, JA, DESCA );
226 return;
227 }
228 }
229 else
230 {
232 {
234 {
236 IA, JA, DESCA );
237 return;
238 }
240 }
241 }
242 }
243 else if( type ==
DCPLX )
244 {
246 {
248 {
250 IA, JA, DESCA );
251 return;
252 }
253 }
254 else
255 {
257 {
259 {
261 IA, JA, DESCA );
262 return;
263 }
265 }
266 }
267 }
268
269
270
272
273
274
275 PB_Cdescribe( M, N, IA, JA, DESCA, nprow, npcol, myrow, mycol, &Aii, &Ajj,
276 &Ald, &Aimb1, &Ainb1, &Amb, &Anb, &Arow, &Acol, Ad0 );
277
278
279
280 Amp =
PB_Cnumroc( M, 0, Aimb1, Amb, myrow, Arow, nprow );
281 Anq =
PB_Cnumroc( N, 0, Ainb1, Anb, mycol, Acol, npcol );
282 if( ( Amp <= 0 ) || ( Anq <= 0 ) ) return;
283
286 Aptr =
Mptr( A, Aii, Ajj, Ald, size );
287
288
289
290
292 ( ( ( Arow < 0 ) || ( nprow == 1 ) ) &&
293 ( ( Acol < 0 ) || ( npcol == 1 ) ) ) )
294 {
295 scal(
C2F_CHAR( UPLO ), &Amp, &Anq, &izero, ALPHA, Aptr, &Ald );
296 return;
297 }
298
299
300
301
302
304 PB_Clcm( ( Arow >= 0 ? nprow : 1 ), ( Acol >= 0 ? npcol : 1 ) );
305
307
309 {
310
311
312
313
314
315 for( k = 0; k < mn; k += nb )
316 {
317 kb = mn - k; ktmp = k + ( kb =
MIN( kb, nb ) );
319 Akp =
PB_Cnumroc( ktmp, 0, Aimb1, Amb, myrow, Arow, nprow );
320 Akq =
PB_Cnumroc( k, 0, Ainb1, Anb, mycol, Acol, npcol );
321 Anq0 =
PB_Cnumroc( kb, k, Ainb1, Anb, mycol, Acol, npcol );
322 if( ( Amp0 = Amp - Akp ) > 0 )
324 Akp, Akq, Ald, size ), &Ald );
325 }
326 }
328 {
329
330
331
332
333
334
335 for( k = 0; k < mn; k += nb )
336 {
337 kb = mn - k; kb =
MIN( kb, nb );
338 Akp =
PB_Cnumroc( k, 0, Aimb1, Amb, myrow, Arow, nprow );
339 Akq =
PB_Cnumroc( k, 0, Ainb1, Anb, mycol, Acol, npcol );
340 Anq0 =
PB_Cnumroc( kb, k, Ainb1, Anb, mycol, Acol, npcol );
341 if( Akp > 0 )
343 0, Akq, Ald, size ), &Ald );
345 }
346 if( ( Anq -= ( Akq += Anq0 ) ) > 0 )
348 Akq, Ald, size ), &Ald );
349 }
350 else
351 {
352
353
354
355
356
357
358 for( k = 0; k < mn; k += nb )
359 {
360 kb = mn - k; kb =
MIN( kb, nb );
361 Akp =
PB_Cnumroc( k, 0, Aimb1, Amb, myrow, Arow, nprow );
362 Akq =
PB_Cnumroc( k, 0, Ainb1, Anb, mycol, Acol, npcol );
363 Anq0 =
PB_Cnumroc( kb, k, Ainb1, Anb, mycol, Acol, npcol );
364 if( Akp > 0 )
366 0, Akq, Ald, size ), &Ald );
368 Akp =
PB_Cnumroc( k+kb, 0, Aimb1, Amb, myrow, Arow, nprow );
369 if( ( Amp0 = Amp - Akp ) > 0 )
371 Akp, Akq, Ald, size ), &Ald );
372 }
373 if( ( Anq -= ( Akq += Anq0 ) ) > 0 )
375 Akq, Ald, size ), &Ald );
376 }
377
378
379
380}