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
109
110
111 Int dpos, iapos, japos, mpos, mycol, myrow, np, npcol, nprow,
112 npos, nq;
113
114
115
116
117
118
119
120
121 if( *INFO >= 0 ) *INFO =
BIGNUM;
122 else if( *INFO < -
DESCMULT ) *INFO = -(*INFO);
124
125
126
127
133
134
135
137
138
139
140 if( M < 0 )
141 {
142
143
144
145 *INFO =
MIN( *INFO, mpos );
146 PB_Cwarn( ICTXT, -1, ROUT,
"%s sub( %s ) = %d, it must be at least 0",
147 "Illegal number of rows of", MNAME, M );
148 }
149 if( N < 0 )
150 {
151
152
153
154 *INFO =
MIN( *INFO, npos );
155 PB_Cwarn( ICTXT, -1, ROUT,
"%s sub( %s ) = %d, it must be at least 0",
156 "Illegal number of columns of", MNAME, N );
157 }
158
159 if( IA < 0 )
160 {
161
162
163
164 *INFO =
MIN( *INFO, iapos );
165 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal I%s = %d, I%s must be at least 1",
166 MNAME, IA+1, MNAME );
167 }
168 if( JA < 0 )
169 {
170
171
172
173 *INFO =
MIN( *INFO, japos );
174 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal J%s = %d, I%s must be at least 1",
175 MNAME, IA+1, MNAME );
176 }
177
179 {
180
181
182
184 PB_Cwarn( ICTXT, -1, ROUT,
"%s %d for matrix %s. PBLAS accepts: %d or %d",
185 "Illegal descriptor type", DESCA[
DTYPE_], MNAME,
188 else *INFO = -(*INFO);
189
190
191
192 return;
193 }
194
195 if( DESCA[
CTXT_] != ICTXT )
196 {
197
198
199
200
202 PB_Cwarn( ICTXT, -1, ROUT,
"DESC%s[CTXT_] = %d %s= %d", MNAME,
203 DESCA[
CTXT_],
"does not match other operand's context ",
204 ICTXT );
206 else *INFO = -(*INFO);
207
208
209
210 return;
211 }
212
213 if( DESCA[
IMB_] < 1 )
214 {
215
216
217
218 *INFO =
MIN( *INFO, dpos +
IMB_ );
219 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal DESC%s[IMB_] = %d, DESC%s[IMB_] %s",
220 MNAME, DESCA[
IMB_], MNAME,
"must be at least 1" );
221 }
222 if( DESCA[
INB_] < 1 )
223 {
224
225
226
227 *INFO =
MIN( *INFO, dpos +
INB_ );
228 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal DESC%s[INB_] = %d, DESC%s[INB_] %s",
229 MNAME, DESCA[
INB_], MNAME,
"must be at least 1" );
230 }
232 {
233
234
235
236 *INFO =
MIN( *INFO, dpos +
MB_ );
237 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal DESC%s[MB_] = %d, DESC%s[MB_] %s",
238 MNAME, DESCA[
MB_], MNAME,
"must be at least 1" );
239 }
241 {
242
243
244
245 *INFO =
MIN( *INFO, dpos +
NB_ );
246 PB_Cwarn( ICTXT, -1, ROUT,
"Illegal DESC%s[NB_] = %d, DESC%s[NB_] %s",
247 MNAME, DESCA[
NB_], MNAME,
"must be at least 1" );
248 }
249
250 if( ( DESCA[
RSRC_] < -1 ) || ( DESCA[
RSRC_] >= nprow ) )
251 {
252
253
254
257 "Illegal DESC%s[RSRC_] = %d, DESC%s[RSRC_] %s%d", MNAME,
258 DESCA[
RSRC_], MNAME,
"must be either -1, or >= 0 and < ",
259 nprow );
260 }
261 if( ( DESCA[
CSRC_] < -1 ) || ( DESCA[
CSRC_] >= npcol ) )
262 {
263
264
265
268 "Illegal DESC%s[CSRC_] = %d, DESC%s[CSRC_] %s%d", MNAME,
269 DESCA[
CSRC_], MNAME,
"must be either -1, or >= 0 and < ",
270 npcol );
271 }
272
273 if( M == 0 || N == 0 )
274 {
275
276
277
279 {
280
281
282
283 *INFO =
MIN( *INFO, dpos +
M_ );
284 PB_Cwarn( ICTXT, -1, ROUT,
"DESC%s[M_] = %d, it must be at least 0",
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( DESCA[
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 MNAME, DESCA[
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", MNAME,
321 }
323 {
324
325
326
327 *INFO =
MIN( *INFO, dpos +
N_ );
329 "Illegal DESC%s[N_] = %d, it must be at least 1", MNAME,
331 }
332
333 if( ( DESCA[
M_] >= 1 ) && ( DESCA[
N_] >= 1 ) )
334 {
335 if( IA+M > DESCA[
M_] )
336 {
337
338
339
340 *INFO =
MIN( *INFO, iapos );
341 PB_Cwarn( ICTXT, -1, ROUT,
"%s M = %d, I%s = %d, DESC%s[M_] = %d",
342 "Operation out of bounds:", M, MNAME, IA+1, MNAME,
344 }
345 if( JA+N > DESCA[
N_] )
346 {
347
348
349
350 *INFO =
MIN( *INFO, japos );
351 PB_Cwarn( ICTXT, -1, ROUT,
"%s N = %d, J%s = %d, DESC%s[N_] = %d",
352 "Operation out of bounds:", N, MNAME, JA+1, MNAME,
354 }
355 }
356
357
358
360 {
362 DESCA[
RSRC_], nprow );
363 if( DESCA[
LLD_] <
MAX( 1, np ) )
364 {
366 DESCA[
CSRC_], npcol );
367
368
369
370
371 if( DESCA[
LLD_] < 1 )
372 {
373 *INFO =
MIN( *INFO, dpos +
LLD_ );
375 "DESC%s[LLD_] = %d, it must be at least 1", MNAME,
377 }
378 else if( nq > 0 )
379 {
380
381
382
383
384 *INFO =
MIN( *INFO, dpos +
LLD_ );
386 "DESC%s[LLD_] = %d, it must be at least %d", MNAME,
388 }
389 }
390 }
391 }
392
393
394
395
396 if( *INFO ==
BIGNUM ) *INFO = 0;
398 else *INFO = -(*INFO);
399
400
401
402}