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
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 Int dpos, icpos, ixpos, jxpos, mycol, myrow, np, npcol, npos,
109 nprow, nq;
110
111
112
113
114
115
116
117
118 if( *INFO >= 0 ) *INFO =
BIGNUM;
119 else if( *INFO < -
DESCMULT ) *INFO = -(*INFO);
121
122
123
124
130
131
132
134
135
136
137 if( N < 0 )
138 {
139
140
141
142 *INFO =
MIN( *INFO, npos );
143 PB_Cwarn( ICTXT, -1, ROUT,
"%s sub( %s ) = %d, it must be at least 0",
144 "Illegal length of", VNAME, N );
145 }
146
147 if( IX < 0 )
148 {
149
150
151
152 *INFO =
MIN( *INFO, ixpos );
153 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal I%s = %d, I%s must be at least 1",
154 VNAME, IX+1, VNAME );
155 }
156 if( JX < 0 )
157 {
158
159
160
161 *INFO =
MIN( *INFO, jxpos );
162 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal J%s = %d, J%s must be at least 1",
163 VNAME, JX+1, VNAME );
164 }
165
167 {
168
169
170
172 PB_Cwarn( ICTXT, -1, ROUT,
"%s %d for matrix %s. PBLAS accepts: %d or %d",
173 "Illegal descriptor type", DESCX[
DTYPE_], VNAME,
176 else *INFO = -(*INFO);
177
178
179
180 return;
181 }
182
183 if( DESCX[
CTXT_] != ICTXT )
184 {
185
186
187
188
190 PB_Cwarn( ICTXT, -1, ROUT,
"DESC%s[CTXT_] = %d %s= %d", VNAME,
191 DESCX[
CTXT_],
"does not match other operand's context ",
192 ICTXT );
194 else *INFO = -(*INFO);
195
196
197
198 return;
199 }
200
201 if( DESCX[
IMB_] < 1 )
202 {
203
204
205
206 *INFO =
MIN( *INFO, dpos +
IMB_ );
207 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal DESC%s[IMB_] = %d, DESC%s[IMB_] %s",
208 VNAME, DESCX[
IMB_], VNAME,
"must be at least 1" );
209 }
210 if( DESCX[
INB_] < 1 )
211 {
212
213
214
215 *INFO =
MIN( *INFO, dpos +
INB_ );
216 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal DESC%s[INB_] = %d, DESC%s[INB_] %s",
217 VNAME, DESCX[
INB_], VNAME,
"must be at least 1" );
218 }
220 {
221
222
223
224 *INFO =
MIN( *INFO, dpos +
MB_ );
225 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal DESC%s[MB_] = %d, DESC%s[MB_] %s",
226 VNAME, DESCX[
MB_], VNAME,
"must be at least 1" );
227 }
229 {
230
231
232
233 *INFO =
MIN( *INFO, dpos +
NB_ );
234 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal DESC%s[NB_] = %d, DESC%s[NB_] %s",
235 VNAME, DESCX[
NB_], VNAME,
"must be at least 1" );
236 }
237
238 if( ( DESCX[
RSRC_] < -1 ) || ( DESCX[
RSRC_] >= nprow ) )
239 {
240
241
242
245 "Illegal DESC%s[RSRC_] = %d, DESC%s[RSRC_] %s%d", VNAME,
246 DESCX[
RSRC_], VNAME,
"must be either -1, or >= 0 and < ",
247 nprow );
248 }
249 if( ( DESCX[
CSRC_] < -1 ) || ( DESCX[
CSRC_] >= npcol ) )
250 {
251
252
253
256 "Illegal DESC%s[CSRC_] = %d, DESC%s[CSRC_] %s%d", VNAME,
257 DESCX[
CSRC_], VNAME,
"must be either -1, or >= 0 and < ",
258 npcol );
259 }
260
261 if( INCX != 1 && INCX != DESCX[
M_] )
262 {
263
264
265
266 *INFO =
MIN( *INFO, icpos );
268 "Illegal INC%s = %d, INC%s should be either 1 or %d", VNAME,
270 }
271
272 if( N == 0 )
273 {
274
275
276
278 {
279
280
281
282 *INFO =
MIN( *INFO, dpos +
M_ );
283 PB_Cwarn( ICTXT, -1, ROUT,
"DESC%s[M_] = %d, it must be at least 0",
285
286 }
288 {
289
290
291
292 *INFO =
MIN( *INFO, dpos +
N_ );
293 PB_Cwarn( ICTXT, -1, ROUT,
"DESC%s[N_] = %d, it must be at least 0",
295 }
296
297 if( DESCX[
LLD_] < 1 )
298 {
299
300
301
302 *INFO =
MIN( *INFO, dpos +
LLD_ );
303 PB_Cwarn( ICTXT, -1, ROUT,
"DESC%s[LLD_] = %d, it must be at least 1",
304 VNAME, DESCX[
LLD_] );
305 }
306 }
307 else
308 {
309
310
311
313 {
314
315
316
317 *INFO =
MIN( *INFO, dpos +
M_ );
319 "Illegal DESC%s[M_] = %d, it must be at least 1", VNAME,
321
322 }
324 {
325
326
327
328 *INFO =
MIN( *INFO, dpos +
N_ );
330 "Illegal DESC%s[N_] = %d, it must be at least 1", VNAME,
332 }
333
334 if( ( DESCX[
M_] >= 1 ) && ( DESCX[
N_] >= 1 ) )
335 {
336 if( INCX == DESCX[
M_] )
337 {
338
339
340
341 if( IX >= DESCX[
M_] )
342 {
343
344
345
346 *INFO =
MIN( *INFO, ixpos );
347 PB_Cwarn( ICTXT, -1, ROUT,
"%s I%s = %d, DESC%s[M_] = %d",
348 "Array subscript out of bounds:", VNAME, IX+1, VNAME,
350 }
351 if( JX+N > DESCX[
N_] )
352 {
353
354
355
356 *INFO =
MIN( *INFO, jxpos );
358 "%s N = %d, J%s = %d, DESC%s[N_] = %d",
359 "Operation out of bounds:", N, VNAME, JX+1, VNAME,
361 }
362 }
363 else
364 {
365
366
367
368 if( JX >= DESCX[
N_] )
369 {
370
371
372
373 *INFO =
MIN( *INFO, jxpos );
374 PB_Cwarn( ICTXT, -1, ROUT,
"%s J%s = %d, DESC%s[N_] = %d",
375 "Array subscript out of bounds:", VNAME, JX+1, VNAME,
377 }
378 if( IX+N > DESCX[
M_] )
379 {
380
381
382
383 *INFO =
MIN( *INFO, ixpos );
385 "%s N = %d, I%s = %d, DESC%s[M_] = %d",
386 "Operation out of bounds:", N, VNAME, IX+1, VNAME,
388 }
389 }
390 }
391
392
393
395 {
397 DESCX[
RSRC_], nprow );
398 if( DESCX[
LLD_] <
MAX( 1, np ) )
399 {
401 DESCX[
CSRC_], npcol );
402
403
404
405
406 if( DESCX[
LLD_] < 1 )
407 {
408 *INFO =
MIN( *INFO, dpos +
LLD_ );
410 "DESC%s[LLD_] = %d, it must be at least 1", VNAME,
412 }
413 else if( nq > 0 )
414 {
415
416
417
418
419 *INFO =
MIN( *INFO, dpos +
LLD_ );
421 "DESC%s[LLD_] = %d, it must be at least %d", VNAME,
423 }
424 }
425 }
426 }
427
428
429
430
431 if( *INFO ==
BIGNUM ) *INFO = 0;
433 else *INFO = -(*INFO);
434
435
436
437}