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
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 char UploA;
213 Int Acol, Ai, Aii, Aimb1, Ainb1, Aj, Ajj, Akp, Akq, Ald, Amb,
214 Amp, Amp0, Anb, Anq, Anq0, Arow, XCfr, XCld, XRfr, XRld,
215 Xi, Xj, ctxt, info, ione=1, k, kb, ktmp, mycol, myrow, nb,
216 npcol, nprow, size, upper;
218
219
220
222 char * Aptr = NULL, * XC = NULL, * XR = NULL;
223
224
225
226
230#ifndef NO_ARGCHK
231
232
233
235 if( !( info = ( ( nprow == -1 ) ? -( 701 +
CTXT_ ) : 0 ) ) )
236 {
237 if( ( !upper ) && ( UploA !=
CLOWER ) )
238 {
239 PB_Cwarn( ctxt, __LINE__,
"PDSYR",
"Illegal UPLO = %c\n", UploA );
240 info = -1;
241 }
242 PB_Cchkvec( ctxt,
"PDSYR",
"X", *N, 2, Xi, Xj, Xd, *INCX, 7, &info );
243 PB_Cchkmat( ctxt,
"PDSYR",
"A", *N, 2, *N, 2, Ai, Aj, Ad, 12, &info );
244 }
245 if( info ) {
PB_Cabort( ctxt,
"PDSYR", info );
return; }
246#endif
247
248
249
251 return;
252
253
254
255#ifdef NO_ARGCHK
257#endif
258
259
260
262
263
264
265 PB_Cdescribe( *N, *N, Ai, Aj, Ad, nprow, npcol, myrow, mycol, &Aii, &Ajj,
266 &Ald, &Aimb1, &Ainb1, &Amb, &Anb, &Arow, &Acol, Ad0 );
267
268
269
270
271 if( *INCX == Xd[
M_] )
272 {
273 PB_CInV( type,
NOCONJG,
ROW, *N, *N, Ad0, 1, ((
char *) X), Xi, Xj,
274 Xd,
ROW, &XR, XRd0, &XRfr );
275 PB_CInV( type,
NOCONJG,
COLUMN, *N, *N, Ad0, 1, XR, 0, 0,
276 XRd0,
ROW, &XC, XCd0, &XCfr );
277 }
278 else
279 {
280 PB_CInV( type,
NOCONJG,
COLUMN, *N, *N, Ad0, 1, ((
char *) X), Xi, Xj,
281 Xd,
COLUMN, &XC, XCd0, &XCfr );
282 PB_CInV( type,
NOCONJG,
ROW, *N, *N, Ad0, 1, XC, 0, 0,
283 XCd0,
COLUMN, &XR, XRd0, &XRfr );
284 }
285
286
287
288 Amp =
PB_Cnumroc( *N, 0, Aimb1, Amb, myrow, Arow, nprow );
289 Anq =
PB_Cnumroc( *N, 0, Ainb1, Anb, mycol, Acol, npcol );
290
291 if( ( Amp > 0 ) && ( Anq > 0 ) )
292 {
294 Aptr =
Mptr( ((
char *) A), Aii, Ajj, Ald, size );
295
296
297
298
300 PB_Clcm( ( Arow >= 0 ? nprow : 1 ), ( Acol >= 0 ? npcol : 1 ) );
301
302 XCld = XCd0[
LLD_]; XRld = XRd0[
LLD_];
303
304 if( upper )
305 {
306 for( k = 0; k < *N; k += nb )
307 {
308 kb = *N - k; kb =
MIN( kb, nb );
309 Akp =
PB_Cnumroc( k, 0, Aimb1, Amb, myrow, Arow, nprow );
310 Akq =
PB_Cnumroc( k, 0, Ainb1, Anb, mycol, Acol, npcol );
311 Anq0 =
PB_Cnumroc( kb, k, Ainb1, Anb, mycol, Acol, npcol );
312 if( Akp > 0 && Anq0 > 0 )
313 dger_( &Akp, &Anq0, ((
char *) ALPHA), XC, &ione,
314 Mptr( XR, 0, Akq, XRld, size ), &XRld,
Mptr( Aptr, 0, Akq,
315 Ald, size ), &Ald );
317 XCld, size ), XCld,
Mptr( XR, 0, Akq, XRld, size ), XRld,
319 }
320 }
321 else
322 {
323 for( k = 0; k < *N; k += nb )
324 {
325 kb = *N - k; ktmp = k + ( kb =
MIN( kb, nb ) );
326 Akp =
PB_Cnumroc( k, 0, Aimb1, Amb, myrow, Arow, nprow );
327 Akq =
PB_Cnumroc( k, 0, Ainb1, Anb, mycol, Acol, npcol );
329 XCld, size ), XCld,
Mptr( XR, 0, Akq, XRld, size ), XRld,
331 Akp =
PB_Cnumroc( ktmp, 0, Aimb1, Amb, myrow, Arow, nprow );
332 Amp0 = Amp - Akp;
333 Anq0 =
PB_Cnumroc( kb, k, Ainb1, Anb, mycol, Acol, npcol );
334 if( Amp0 > 0 && Anq0 > 0 )
335 dger_( &Amp0, &Anq0, ((
char *) ALPHA),
Mptr( XC, Akp,
336 0, XCld, size ), &ione,
Mptr( XR, 0, Akq, XRld, size ),
337 &XRld,
Mptr( Aptr, Akp, Akq, Ald, size ), &Ald );
338 }
339 }
340 }
341 if( XRfr ) free( XR );
342 if( XCfr ) free( XC );
343
344
345
346}